1、編寫shell腳本 ex1.sh,提示用戶輸入用戶名,並判斷此用戶名是否存在。
(提示:利用read、grep和/etc/passwd)
#!/bin/bash echo "請輸入用戶名" read username #相當於scanf if grep $username /etc/passwd; then #if的結尾要有fi echo "存在" else echo "不存在" fi
2、 編寫shell腳本 ex2.sh,能將命令行參數相加並輸出,如: ex2 1 3 8輸出結果為12。
(提示:利用$@和循環結構)
#①可以把命令行的任意個數字相加 #!/bin/bash sum=0 #賦初值 for var in $@ #命令行的所有值 用以循環 do sum=$[$sum+$var] #$相當於地址符 done echo "$sum" #②可以把命令行三個數相加 #!/bin/bash CITY=SUM; let SUM=$1+$2+$3 echo "$SUM"
3、 編寫shell腳本 ex3.sh,能將命令行參數所代表的文件統計行數,相加並輸出結果,如: ex3 file1 file2 file3 ,統計三個文件的行數的總數。
(提示:利用$@和循環結構)
#!/bin/bash sum=0 nub=0 for var in "$@" do nub=$(sed -n '$=' $var) #讀取文件中數據的行數 sum=$[$sum+$nub] done echo "$sum"
4、 編寫shell腳本 ex4.sh,將當前目錄下的.c文件移到命令行參數指定的目錄下,並按文件大小排序,顯示移動后指定目錄的內容。
(提示:利用$1,sort和ls)
#!/bin/bash echo "請輸入地址:" read addr #scanf輸入地址 mv ./*.c $addr # ./表示當前目錄 *.c表示所有一.c結尾的文件 mv移動操作 ls -S $addr #ls 顯示當前目錄下的文件夾 -S將文件大小排序
5、 編寫shell腳本 ex5.sh,輸出命令行參數中的最大數,如: ex2 1 3 8輸出結果為8;如果命令行參數中有非數字參數則報錯。
(提示:利用$@、循環結構和分支判斷)
#!/bin/bash max=$1 for var in "$@" do if [[ $var != *[!0-9]* ]];then #*X*匹配任何包含x的字符串(開頭,中間或結尾),[!0-9]匹配任何非0-9的字符,合起來就是匹配沒有0-9的字符 if [ $var -gt $max ];then #比較var和max的大小 -gt表示">" max=$var fi else echo "含有其他字符" exit #結束 fi done echo "$max"
