Linux實驗三:Shell編程

文章目錄

  • 一、實驗目的
  • 二、實驗要求
  • 三、實驗內容
    • 1、通配符的使用
    • 2、重定向
    • 3、管道
    • 4、shell變量
    • 5、建立下面的腳本,運行并分析輸出結果,并給出代碼注釋。
    • 6、編寫腳本


一、實驗目的

1.為文件擴展名使用通配符

2.標準輸入、標準輸出和標準錯誤的重定向

3.使用管道將一個進程的輸出作為輸入提供給另一個進程。

4.執行命令分組和行繼續

5.編寫shell 腳本。


二、實驗要求

1、管道(pipe-line)的使用
執行格式: command1|command2
功能:將command1的執行結果送到command2 作為輸入

2、標準輸入控制
執行格式: command-line<file 將file作為command-line的輸入

3、標準輸出控制
執行格式一: command>filename
功能:將command的執行結果送至指定的filename中
執行格式二: command>!filename
功能:同上,若filename文件已存在,則強迫重寫
執行格式三:command>>filename
功能:將command 的執行結果,附加(append)到filename

4、shell腳本的調試方法:
(1)輸入重定向到shell腳本
格式:$ bash < 腳本名
(2)以腳本名作為bash參數
格式:$ bash 腳本名 [參數]
(3)在提示符下直接執行
方法:先利用chmod命令將腳本文件設置為可執行權限;然后,將該腳本所在的目錄添加到命令搜索路徑中
(4)將shell腳本的權限設置為可執行,然后在提示符下直接執行
方法:
先利用chmod命令將腳本文件設置為可執行權限


三、實驗內容

1、通配符的使用

(1)進入/etc目錄并且將此處所有文件以列表顯示

$ cd /etc
$ ls(或者$ echo *)
在這里插入圖片描述

(2)要求用帶有通配符的ls命令來顯示文件名,實現:
-以conf結束

ls *conf
在這里插入圖片描述

-以d 或D開始

ls [dD]*
在這里插入圖片描述

-在文件名的第五個位置包括一個o

ls -d ????o*在這里插入圖片描述

-包含單詞tab

ls -d *tab*在這里插入圖片描述

-以數字結尾

ls -d *[0~9]
在這里插入圖片描述

-不以數字結尾

ls -d *[!0~9]
在這里插入圖片描述

(3)如果你執行命令ls -d ?[!y]*[e-f]將會發生什么情況?能與之匹配的最短文件名是什么?執行這些命令來驗證你的答案。

第一個位置匹配任意一個字符,第二個位置字符不是y,第二個位置之后到最后一個位置之間任意字符串,最后一個位置字符是e或者f。
在這里插入圖片描述


2、重定向

(1)使用cat命令和指令來創建一個包含幾行文本名為junk的文件。

在這里插入圖片描述

(2)使用重定向junk文件中追加幾行文本。然后查看junk文件的內容并且檢查你剛剛所創建的文本是否都存在。

在這里插入圖片描述


3、管道

(1)統計你當前目錄所有文件的數目。使用管道,而不是手動地統計所有文件

在這里插入圖片描述

(2)ls > tempfile ; wc -l tempfile是否和你剛剛使用的管道功能相同?為什么或者為什么不?

不同,管道功能不需要新的文件,本題的操作創造了新的文件tempfile。

(3)將多個用戶文件聯合為一個大文件。

在這里插入圖片描述


4、shell變量

(1)顯示由你當前進程環境所定義的所有變量。并且顯示出當前輸出的所有變量。

$ set

(2)創建一個變量x并初始化值為10。檢查這個變量的值。再次,顯示當前進程環境的所有變量。

在這里插入圖片描述

(3)創建一個subshell.查看變量x在subshell下的值是什么?

在這里插入圖片描述

(4)將x設置為500并返回到父進程。當前x的值是什么?為什么?

x=10的值保存在父進程中,x=500的值保存在了子進程中,互不繼承。
在這里插入圖片描述

(5)確保子進程繼承了x。如何實現?

在這里插入圖片描述


5、建立下面的腳本,運行并分析輸出結果,并給出代碼注釋。

(1)ex1

#!/bin/bash   //所使用shell的絕對路徑名,表示由bash腳本編寫,從而應調用相應的解釋程序予以執行
#shell special character   //“#”開頭正文行表注釋
echo "current directory is `pwd`"  //顯示current directory is 當前目錄的絕對路徑
echo "current directory is 'pwd'"  //顯示current directory is 'pwd'
echo "home directory is $HOME"   //顯示home directory is 當前用戶
echo "file*.?"  //顯示file*.?
today=`date`  //將命令date賦給變量today
echo Today is :$today  //顯示Today is :此刻的日期
ls ex*  //顯示當前目錄中文件名是以ex打頭的文件

在這里插入圖片描述

(2)ex2

#!/bin/bash
#bash script programming
if test $# == 0 //參數個數為0
thenls -l|grep '^d'   //顯示當前目錄中的所有文件夾信息
elsefor idols -l $i|grep '^d'  //顯示各個參數目錄中的所有文件夾信息done
fi

在這里插入圖片描述

(3)ex3

case $1 in  //選擇 -b或者-s如果什么都不選就進入*)
-b) count=`grep ^b $2 | wc -l`
echo "The number of lines in $2 that start with b is $count.";;
//顯示The number of lines in 給出的文件 that start with b is 第幾行
-s) count=`grep ^s $2 | wc -l`
echo "The number of lines in $2 that start with s is $count.";;
//顯示The number of lines in 給出的文件 that start with s is 第幾行
*) echo "That option is not recognized.";;
//顯示That option is not recognized.
esac //關閉case

在這里插入圖片描述


6、編寫腳本

(1)編寫shell 腳本,計算1-100 的和;
在這里插入圖片描述

(2)編寫shell 腳本,要求輸入一個數字,然后計算出從1 到輸入數字的和,要求,如果輸入的數字小于1,則重新輸入,直到輸入正確的數字為止;
在這里插入圖片描述

(3)編寫shell 腳本,把/home目錄下的所有目錄拷貝到/tmp目錄下;
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/443888.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443888.shtml
英文地址,請注明出處:http://en.pswp.cn/news/443888.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

a href=#與 a href=javascript:void(0) 的區別

a href"#"> 點擊鏈接后&#xff0c;頁面會向上滾到頁首&#xff0c;# 默認錨點為 #TOP<a href"javascript:void(0)" onClick"window.open()"> 點擊鏈接后&#xff0c;頁面不動&#xff0c;只打開鏈接<a href"#" οnclick&…

Linux實驗四:編譯和調試工具的使用

文章目錄一、實驗目的&#xff1a;二、實驗要求三、實驗內容四、實驗操作1、用gcc編譯程序&#xff0c;寫出編譯過程&#xff0c;并給出運行結果。2、調試程序&#xff0c;要求用gdb進行調試并給出修改方案。3、make的使用一、實驗目的&#xff1a; 1、練習并掌握Linux提供的v…

Linux實驗五:Linux環境下的C語言編程

文章目錄一、實驗目的&#xff1a;二、實驗要求三、實驗內容1、編寫一段C語言程序使其完成&#xff1a;父進程創建兩個子進程&#xff0c;每個進程都在屏幕上顯示自己的進程ID號。2、上機調試下面的程序&#xff0c;觀察運行結果&#xff0c;分析原因。3、利用兩個管道進行雙向…

百戰c++(4)

1.求下面函數的返回值&#xff08;微軟&#xff09; int func(x) { int countx 0; while(x) { countx ; x x&(x-1); } return countx; } 假定x 9999。 答案&#xff1a;8 思路&#xff1a;將x轉化為2進制&#xff0c;看含有的1的個數。 2. 什么是“引用”&…

ndarray對象的建立

文章目錄ndarray&#xff08;別名array&#xff09;常用屬性創建NumPy數組使用array()函數使用zeros()函數使用ones()函數使用empty()函數使用arange()函數注意ndarray&#xff08;別名array&#xff09; 常用屬性 import numpy as np # Numpy工具包data np.arange(12).res…

百戰c++(5)

11. 已知strcpy的函數原型&#xff1a;char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串&#xff0c;strSrc 是源字符串。不調用C/C 的字符串庫函數&#xff0c;請編寫函數 strcpy。 答案&#xff1a; char *strcpy(char *strDest, const char *strS…

Numpy數組的廣播機制

文章目錄前言數組廣播廣播機制的使用條件前言 Numpy數組不需要循環遍歷&#xff0c;即可對每個元素執行批量的算術運算操作&#xff08;矢量化運算&#xff09;。當兩個數組大小&#xff08;Numpy.shape&#xff09;不同時&#xff0c;進行算術運算會出現廣播機制。 數組廣播…

百戰c++(6)

26. 描述內存分配方式以及它們的區別? 1&#xff09; 從靜態存儲區域分配。內存在程序編譯的時候就已經分配好&#xff0c;這塊內存在程序的整個運行期間都存在。例如全局變量&#xff0c;static 變量。 2&#xff09; 在棧上創建。在執行函數時&#xff0c;函數內局部變量的…

Spring3.1.0+Quartz1.8.6整合實現計劃任務

1.首先要加入任務計劃的相關的jar包&#xff0c;這里除了需要加Spring3.1.0的jar&#xff0c;還需要加quartz-all-1.8.6.jarslf4j-api-1.5.8.jar slf4j-log4j12.jar這三個包&#xff0c;如果你是SSH整合的項目&#xff0c;里面有下面的兩個包了&#xff0c;就可以不加&#xff…

百戰c++(7)

40. 鏈表題&#xff1a;一個鏈表的結點結構 struct Node { int data ; Node *next ; }; typedef struct Node Node ; (1)已知鏈表的頭結點head,寫一個函數把這個鏈表逆序 ( Intel) Node * ReverseList(Node *head) //鏈表逆序 { if ( head NULL || head->next NU…

數組的轉置和軸對稱

文章目錄T屬性transpose()方法swapaxes()方法T屬性 import numpy as np # Numpy工具包data np.arange(12).reshape(3, 4) # 創建一個3行4列的數組 print(data)# 數組的轉置和軸對稱 data1 data.T print(data1)print(data) [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] print(dat…

百戰c++(8)

43. 寫一個在一個字符串(n)中尋找一個子串(m)第一個位置的函數。 KMP算法效率最好&#xff0c;時間復雜度是&#xff2f;(nm)。 44. 多重繼承的內存分配問題&#xff1a; 比如有class A : public class B, public class C {} 那么A的內存結構大致是怎么樣的&#xff1f; 這…

管道實現父子進程的信息傳遞(一)【fork函數、pipe函數、write/read操作、wait函數】

文章目錄題目描述代碼實現關于pipe函數關于讀寫操作關于讀寫端口關于wait函數功能&#xff1a;注意&#xff1a;關于fork函數題目描述 編寫一個程序&#xff0c;利用管道實現父子進程的通信&#xff0c;父進程向子進程發送信息&#xff0c;由子進程輸出顯示。 代碼實現 #inclu…

基礎的shell編程問題(一)

文章目錄題目一題目描述代碼實現關于$#的有關內容實測本程序的作用題目二題目描述代碼實現注釋關于argc、argv關于read函數關于文件描述符關于write函數本程序的作用題目三題目描述代碼實現實測關于grep命令關于read命令題目四題目描述代碼實現關于test命令實測題目一 題目描述…

百戰c++(9)

12 . 下面的代碼輸出是什么&#xff0c;為什么&#xff1f; void foo(void) { unsigned int a 6; int b -20; (ab > 6) puts("> 6") : puts("< 6"); } 這個問題測試你是否懂得C語言中的整數自動轉換原則&#xff0c;我發現有些開發者懂得…

基礎的shell編程問題(二)

文章目錄題目一題目描述代碼實現結果驗證關于本題題目二題目描述代碼實現結果測試題目三題目描述代碼實現及結果測試題目四題目描述代碼實現及結果測試題目五題目描述代碼實現及結果測試題目一 題目描述 輸入的命令行參數必須是hello&#xff0c;才會正確顯示&#xff1b;否則…

百戰c++(10)

1.多態類中的虛函數表是Compile-Time&#xff0c;還是Run-Time時建立的? 2.將一個 1M -10M 的文件&#xff0c;逆序存儲到另一個文件&#xff0c;就是前一個文件的最后一個 字符存到新文件的第一個字符&#xff0c;以此類推。 3.main主函數執行完畢后&#xff0c;是否可能會…

Numpy實現酒鬼漫步問題【以及randint()、where()、cumsum()、argmax()的用法詳解】

文章目錄題目描述代碼實現關于本題涉及到的幾個函數randint()where()cumsum()題目拓展題目描述代碼實現題目拓展題目描述代碼實現argmax()題目描述 從前有一個酒鬼&#xff0c;喝醉了行走在一條直線上&#xff0c;每走一步方向是不確定的&#xff08;向前或者向后&#xff09;…

百戰c++(11)

31.找錯 Void test1() { char string[10]; char* str1"0123456789"; strcpy(string, str1); } Void test2() { char string[10], str1[10]; for(I0; I<10;I) { str1[i] a; } strcpy(string, str1); } Void test3(char* str1) { char string[10]; if(st…

搞清axis的含義,這一篇就夠了!

文章目錄axis的含義旁門左道式理解二維數組中的axis三維數組中的axis正規理解axis的含義 在自己分析之前先擺上官方關于多維數組中axis的值的定義&#xff1a; axis 0&#xff0c;表示第一個維度 axis 1&#xff0c;表示第二個維度 axis -1&#xff0c;表示最后一個維度…