shell編程(1)
一.回顧練習
一般通配符
花括號{}
倒引號,單引號,雙引號
輸出重定向> >>
輸入重定向< <<
用戶自定義變量
二 Shell命令練習
(1)通過幫助信息查看,簡述以下文件的用途
①/etc/passwd (提示:通過man 5 passwd查看此文件描述說明)
/etc/passwd存放密碼文件,文件中每個用戶都有一個對應的記錄行,它記錄了這個用戶的一些基本屬性,包括:登錄名,可選的加密後的密碼,數字用戶id,數字組id,用戶名和註釋字段,用戶主目錄,可選的用戶命令解釋器。
②/etc/shadow(提示:通過man 5 shadow查看此文件描述說明)
/etc/shadow是passwd文件的一個影子,/etc/shadow文件中的記錄行與/etc/passwd中的一一對應,但是只有系統管理員才能夠進行修改和查看。
③/etc/group(提示:通過man 5 group查看此文件描述說明)
/etc/group存儲有關本地用戶組的信息
④/etc/gshadow(提示:通過man 5 gshadow查看此文件描述說明)
/etc/gshadow是/etc/group的加密資訊文件,比如用戶組管理密碼就存放在該文件中。
(2)依次輸入如下命令,觀察運行結果。結合man id查看到的幫助信息,指出每一條命令功能
id:id命令可以顯示真實有效的用戶ID(UID)和組ID(GID)
id -u只顯示用戶ID
id -u root 即查看root的用戶ID,為0
id -u hadoop即查看用戶hadoop的用戶ID,為1000
(3)在shell命令終端依次輸入以下命令,觀察執行結果,理解每條命令實現的具體功能
which python
whereis python
locate python
find /usr/bin -name python
(說明: which, whereis, locate,find都具有檢索的功能,結合執行結果,查找幫助信息,總結其區別)
which查看可執行文件的位置
whereis查看文件的位置
locate
find實際搜尋硬盤查詢文件名稱
②grep -n -E ‘root|jsj|^user*‘ /etc/passwd(提示:擴展正則表達式)
grep -n -E ‘[[:digit:]]‘ /etc/passwd
grep -n -E ‘[[:alpha:]]‘ /etc/passwd
grep -n ‘[0-9]\{4,\}‘ /etc/group(提示: 在用戶組文件中查找GID是4位數及以上的組信息記錄)
(說明:帶選項-E的表示擴展的正則表達式;不帶選項-E的是普通的正則表達式)
grep命令可通過正則表達式搜索文本,並打印匹配到的行;選項-n可打印行號,-E可使用多個正則表達式。
③sudo apt-get install gimp
which gimp
sudo apt-get remove gimp
which gimp
sudo apt-get install gimp命令可安裝gimp
sudo apt -get remove gimp命令可卸載gimp
which gimp用於查看文件的位置。
④ls -dl/root --time-style=long-iso
ls -dl /root --time-style=long-iso | cut -d‘ ‘ -f1,8
(說明:cut命令的選項-d後引號裏有空格;提示: 和前一行結果對比觀察)
選項-d可自定義分隔符,-f顯示指定的域中的內容,上述命令指定空格為分隔符,顯示第1和第8個域中的內容。
⑤ls -l --time-style=long-iso
ls -l --time-style=long-iso -t
ls -l --time-style=long-iso -t -r (說明:依次執行,對比觀察,結合幫助選項)
⑥ls /usr/share/man
ls /usr/share/man | grep man[1-8]
ls /usr/share/man/man1
file /usr/share/man/man1/ls.1.gz(結合執行結果,review2.8.1節gzip命令內容)
file命令可識別文件類型,然後創建新目錄temp,將ls.1.gz拷貝至temp目錄,gzip命令是進行解壓。
⑦ls –l /home | grep "^d" | wc –l
ls-l查找在 /home目錄下的文件,grep “^d”過濾行開頭為d的文件,wc -l統計行數
⑧sudo adduser user7
ls /home | tee users | wc -l (提示:輸入cat users觀察該文件內容)
sudo adduser命令是用來添加新用戶的
(4)根據要求寫出相應的shell命令
①在目錄/usr/include下搜索文件signal.h是否存在(提示: find命令)
②在/usr/include目錄下的所有文件中查找包含BUFSIZ的行,並顯示所在行號。要求:屏幕上只顯示查找到的結果,過濾錯誤信息。
(提示:①利用grep和通配符*;②利用錯誤信息重定向和特殊設備文件/dev/null)
③在用戶名密碼文件/etc/passwd中查找登錄shell為bash的用戶信息記錄,並顯示行號
(提示:使用grep和正則表達式中的$)
④從/etc/group文件中截取第1列(組名)和第3列(組id),並按照組id號的數值大小由小到大排序。(提示:綜合使用cut, 管道線及sort命令)
(提交文檔時,寫出其實現的功能的命令及截圖,包括命令和結果在內的截圖)
(5)體驗awk, sed用法:依次執行命令,觀察執行結果
①cp/etc/apt/sources.listt1; less t1
②sed -e "s/#.*//g"t1
③sed -e "s/#.*//g"t1| awk ‘{if (length != 0) print $0}‘
④tail -5 /etc/passwd | awk -F: ‘{print $1}‘
⑤tail -5 /etc/group | tee t2
awk ‘BEGIN{print "file t2"} {print "line" NR ":" $0} END {print "over"}‘ t2
(提交文檔時,查閱網絡,總結如下內容:
① 文件/etc/apt/sources.list用途,理解其內容
/etc/apt/sources.list是包管理工具apt所用的記錄
② 命令工具sed功能,截圖顯示2~3個自己嘗試的sed命令練習,並對具體功能作必要陳述說明
sed可將字符進行替換,上圖練習中將hello替換為hi
③ 命令工具awk功能,截圖顯示2~3個自己嘗試的awk命令練習,並對具體功能作必要陳述說明)
行匹配語句awk ‘’只能用單引號
每行按空格或tab分割,輸出文本中的1,4項;
awk -F: -F相當於內置變量FS,指定分割字符,在上圖練習中使用’,’分割
(6)查閱網絡或幫助,體驗命令curl和wget用法。
(提交文檔時,查閱網絡,總結如下內容:
② 命令工具curl功能,截圖顯示自己嘗試的練習,並作必要陳述說明
在linux中curl是一個利用URL規則在命令行下工作的文件傳輸工具,是一款很強大的http命令行工具,它支持文件的上傳和下載,是綜合傳輸工具。
(1)安裝curl
(2)不加任何選項使用curl時,如 curl http://www.baidu.com ,默認會發送GET請求來獲取鏈接內容到標準輸出。
(3)只顯示http頭,而不顯示文件內容,使用-I選項
(4)同時顯示http頭和文件內容,使用-i選項。
(5)將鏈接保存到文件。使用 > 符號將輸出重定向到本地文件中。
②命令工具wget功能,截圖顯示自己嘗試的練習,並作必要陳述說明
wget是一個下載文件的工具,它用在命令行下.wget工具功能完善,支持斷點下載功能,同時支持FTP和HTTP下載方式,支持代理服務器和設置起來方便簡單。
(1) 使用wget下載單個文件,下載的過程中會顯示進度條,包含(下載完成百分比,已經下載的字節,當前下載速度,剩余下載時間)
(2) 使用wget -O下載並以不同的文件名保存。下圖練習中,下載一個文件並以名稱download1保存
三. 編寫一個shell腳本,使用4種方式(參見第4章教材/課件)分別執行。
(1)練習1
第1步,使用vi/vim/gedit或其它編輯器,編寫shell腳本ex1.sh,內容如下:
該腳本的功能是,備份當前目錄下最近1天以內(即24小時內)被修改過的普通文件。以backup系統當前日期時間為文件名,並壓縮存檔。備份過程中出錯信息寫入error_info。然後分別查看備份文檔和報錯信息。
第2步,嘗試第4章介紹的四種方式,運行該腳本,並理解本例中綜合使用的shell命令。
(2)練習2
第1步,使用vi/vim/gedit或其它編輯器,編寫shell腳本ex2.sh,內容如下:
嘗試第4章介紹的四種方式,運行該腳本。
若提示“找不到文件major_code.txt”,請將公郵實驗文件夾中的major_code.txt拷貝至ex1.sh所在目錄,重新執行一次。
註:文件major_code.txt,請不要做任何改動,包括格式。
結合運行結果,分析腳本代碼,在實驗報告中總結以下內容:
② 寫出line3中read命令選項-n11功能
read用於從鍵盤讀取變量值,11n代表有11位。
-n11表示輸入11個字符後輸入結束
②寫出line14的功能
Line14:grep $code $filename >t1 && read x major < t1
功能:搜索code和filename重定向到t1,然後從t1輸出到major;
$code:專業號,是11位學號中的5-8位。
$filename是major_code.txt.
四. 實驗總結
通過本次實驗練習,我了解了shell編程,並練習了很多shell命令。shell命令種類繁多,有很多需要自己去反復練習,在練習的過程中也會經常出現各種各樣的錯誤,比如少空格等等。Shell編程很有趣,但需要花更多時間去體驗去理解。
shell編程(1)