文章目錄
- 題目一
- 題目描述
- 代碼實作
- 關于$#的有關內容
- 實測
- 本程式的作用
- 題目二
- 題目描述
- 代碼實作
- 注釋
- 關于argc、argv
- 關于read函式
- 關于檔案描述符
- 關于write函式
- 本程式的作用
- 題目三
- 題目描述
- 代碼實作
- 實測
- 關于grep命令
- 關于read命令
- 題目四
- 題目描述
- 代碼實作
- 關于test命令
- 實測
題目一
題目描述
請給下面的shell程式加注釋,并說明程式的運行結果,
代碼實作
#!/bin/bash
#bash script programming
if test $# == 0 # 引數個數為0(沒有給出引數)
then
ls -l|grep '^d' # 尋找并顯示當前目錄中以d開頭的字串,即目錄檔案
else # 引數個數不為0(給出了引數)
for i
do
ls -l $i|grep '^d' # 尋找并顯示給出的目錄中以d開頭的字串,即目錄檔案
done
fi
關于$#的有關內容
$# 表示命令列上引數的個數,但不包括shell腳本名本身
詳情請參考:shell預先定義的特殊變數
實測
當給出引數 / 時

當給出引數 home 時

當給出引數 . 時(. 即為當前目錄)

當不給出引數時

本程式的作用
我們會發現不給引數時執行結果與給出引數 . 時執行結果一致,也就是說本程式的作用是:
沒有給出引數時,尋找并顯示當前目錄中以d開頭的字串,即目錄檔案
給出引數時,尋找并顯示給出的目錄中以d開頭的字串,即目錄檔案
題目二
題目描述
分析程式的功能以及運行結果,在代碼后添加注釋,
代碼實作

注釋
引數小于2輸出“you forgot the enter a filename”
退出并報錯
以只讀方式打開引數1,其權限為0644,并將回傳值賦值給fd1
創建一個檔案在引數2,其權限為0644,并將回傳值賦值給fd2
從fd1中讀取位元組數為512的內容到buf緩沖區,并將回傳值賦值給n
將buf中位元組數為n的內容寫到fd2中,直到n不大于0
關閉fd1,fd2
關于argc、argv
argc表示引數數量,argv則是保存引數的陣列,argv[0] 指向程式運行的全路徑名,argv[1]是第一個引數,argv[2]是第二個引數,以此類推……
關于read函式


關于檔案描述符
很多函式都會用到這個東西,這個東西其實就跟我們的學號一樣,是為了方便參考某檔案而存在的,其型別一般為int,比如一個檔案叫test,碰巧還有一個檔案叫test,于是我們在參考他們時如果“叫”他們的名字往往容易兩個一起“回應”你,所以我們將他們分別描述為01、02,那么在需要參考他們的時候就方便多了,
關于write函式


本程式的作用
將fd1中的內容全部復制到fd2中
題目三
題目描述
撰寫一個shell腳本,檢查給定的用戶是否登陸系統,
代碼實作
read -p "請輸入用戶名:" user
if who|grep -qw $user
then
echo $user login
else
echo $user not login
fi
實測


關于grep命令
本題中用到了grep命令的引數:-q,-w
grep -w :只匹配整個單詞,而不是包含一部分單詞的字串
(如grep -w cmy 目標檔案 ,只會匹配‘cmy’,而不匹配‘cmypangle’這種包含cmy的字串)
grep -q : Quiet; do not write anything to standard output. Exit immediately with zero status if any match is found, even if an error was detected.
中文意思為,安靜模式,不列印任何標準輸出,如果有匹配的內容則立即回傳狀態值0,
不帶-q是這樣的:

不帶-w是這樣的

關于read命令
本題中用到了read命令的引數: -p
read -p :用于給出提示符,p是prompt的縮寫,即由這個開關項給出提示資訊,
例如,本題中,回車后螢屏會顯示:
請輸入用戶名:
該陳述句之后輸入的內容就會被保存到use變數中了
題目四
題目描述
撰寫一個shell腳本,判斷檔案是不是字符設備檔案,如果是,將其拷貝到 /dev 目錄下,
代碼實作
if [[ -c $1 ]]
then
cp $1 /dev
else
echo "This file is not a character device file!"
fi
關于test命令
為了方便就直接用老師的PPT截圖了


至于cp命令……emm就是很常規的用法,這里就不說了~
實測

字符設備咱也不知道咋搞,就不搞復制的情況了~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/209066.html
標籤:其他
