1 先測試“/etc/vsftpd”、“/etc/hosts”是否爲目錄,並通過“$?”變量查看返回狀態值,據此判斷測試結果。
[root@C6 ~]# [ -d /etc/vsftpd ] [root@C6 ~]# echo $? 1 [root@C6 ~]# [ -d /etc/hosts ] [root@C6 ~]# echo $? 1
2 測試“/media/cdrom/Server”及其父目錄是否存在,如果存在則顯示“YES”,否則不輸出任何信息。
[root@C6 ~]# if [ -d /media/cdrom ] && [ -f /media/cdrom/Server]; then echo "yes" ; fi
3 使用普通用戶teacher登錄,並測試是否對“/etc/passwd”文件有讀、寫權限,如果是則顯示“YES”。
[teacher@C6 ~]$ [ -r /etc/passwd ] && echo "yes" yes [teacher@C6 ~]$ [ -w /etc/passwd ] && echo "yes"
4 測試當前登錄到系統中的用戶數量是否小於或等於10,是則輸出“YES”。
[root@C6 ~]# [ `who | wc -l` -le 10 ] && echo "yes" yes
5 提取出“/boot”分區的磁盤使用率,並判斷是否超過95%(爲了便於理解,操作步驟以適當進行分解)
[root@C6 ~]# [ `df | grep '/boot'| awk '{print $5}' | awk -F'%' '{print $1}'` -ge 95 ] && echo "Warning"
6 提示用戶輸入一個文件路徑,並判斷是否是“/etc/inittab”,如果是 輸出“yes”
[root@C6 ~]# read -p "Localtion:" FIlePath Localtion:/etc/inittab [root@C6 ~]# [ $FIlePath = '/etc/inittab' ] && echo "yes" yes
7 若當前環境變量LANG的內容不是“en.US”,則輸出LANG變量的值,否則無輸出。
[root@C6 ~]# if [ `echo $LANG` != "en.us" ] ;then echo $LANG ;fi en_US.UTF-8
8 使用touch命令建立一個新文件,測試其內容是否爲空,向文件中寫入內容後,再次進行測試
[root@C6 ~]# touch 1.txt [root@C6 ~]# [ -z 1.txt ] && echo "yes" [root@C6 ~]# [ -z `cat 1.txt` ] && echo "yes" yes [root@C6 ~]# echo 123 > 1.txt [root@C6 ~]# [ -z `cat 1.txt` ] && echo "yes"
9 測試當前的用戶是否是teacher,若不是則提示“Not teacher”
[root@C6 ~]# if [ `echo $USER` != "teacher" ] ;then echo "Not teacher";fiNot teacher
10 只要“/etc/rc.d/rc.local”或者“/etc/init.d/rc.local”中有一個是文件,則顯示“YES”,否則無任何輸出。
[root@C6 ~]# [ -f /etc/rc.d/rc.local ] || [ -f /etc/init.d/rc.local ] && echo "yes" yes
11 測試“/etc/profile” 文件是否有可執行權限,若確實沒有可執行權限,則提示“No x mode.”的信息。
[root@C6 ~]# [ ! -x /etc/profile ] && echo "No x mode" No x mode
12 若當前的用戶是root且使用的shell程序是“/bin/bash”, 則顯示“YES”,否則無任何輸出。
[root@C6 ~]# [ `echo $USER` == "root" ] && [ `echo $SHELL` == "/bin/bash" ] && echo "yes" yes
13 檢查“/var/log/messages”文件是否存在,若存在則統計文件內容的行數並輸出,否則不做任何操作(合理使用變量,可以提高編寫效率)。
[root@C6 ~]# [ -f /var/log/messages ] && echo `wc -l /var/log/messages` 6 /var/log/messages
14 提示用戶指定備份目錄的路徑,若目錄已存在則顯示提示信息後跳過,否則顯示相應提示信息後創建該目錄。
#!/bin/bash read -p "Please import a backup dirname: " BakDir if [ ! -d $BakDir ] then mkdir $BakDir fi
15 統計當前登錄到系統中的用戶數量,並判斷是否超過三個,若是則顯示實際數量並給出警告信息,否則列出登錄的用戶賬號名稱及所在終端。
#!/bin/bash read -p "Please import a backup dirname: " BakDir if [ ! -d $BakDir ] then mkdir $BakDir fi
16 檢查portmap進程是否已經存在,若已經存在則輸出“portmap service if running.” ;否則檢查是否存在“/etc/rc.d/init.d/portmap” 可執行腳本,存在則啓動portmap服務,否則提示“no portmap script file.”。
#!/bin/bash Process=`ps aux | grep portmap | grep -v grep` if [ -n $Process ] ; then if [ ! -f /etc/rc.d/init.d/portmap ] ; then echo "no portmap scipt file" fi else echo "portmap sercice is running" fi
17 每隔五分鐘監測一次mysqld服務進程的運行狀態,若發現mysqld進程已終止,則在“/var/log/messages”文件中追加寫入日誌信息(包括當時時間),並重啓mysqld服務;否則不進行任何操作
#!/bin/bash Process=`ps -ef | grep "mysqld_safe" | grep -v "grep" | wc -l` if [ $Process != 0 ] ; then echo "Mysql Process is running" >> /dev/null else echo "`date +"%Y-%m-%d %H:%M:%S"` ERROR: Mysql Process is Not running" >> /var/log/messages /etc/init.d/mysqld start >> /dev/null fi */5 * * * * /bin/bash /root/1.sh
18 依次輸出三條文字信息,包括一天中的“Moring”、“Noon”、“Evening”字串。
#!/bin/bash for TM in "Morning" "Noon" "Evening" do echo "The $TM of the day. " done
19 對於使用“/bin/bash”作爲登錄shell的系統用戶,檢查他們在“/opt”目錄中擁有的子目錄或文件數量,如果超過100個,則列出具體數值及對應的用戶賬號
#!/bin/bash User=`grep "/bin/bash" /etc/passwd | awk -F ':' '{print $1}'` Number=`find /opt -user $User | grep -v ^/opt$ | wc -l` if [ $Number -gt 100 ] ; then echo $User:$Number fi
20 計算“/etc”目錄中所有“*.conf”形式的配置文件所佔用的總空間大小
#!/bin/bash FileSize=$(ls -l $(find /etc -type f -name *.conf ) | awk '{print $5}') total=0 for i in $FileSize do total=$(expr $total + $i) done echo "total size of conf file is $total"
21 由用戶從鍵盤輸入一個大於1的整數(如50),並計算從1到該數之間各整數的和
#!/bin/bash sum=0 read -p "Please inport a >1 sumber : " Number for i in $Number do sum=$[$Number + $i] done echo "Sum is $sum"
22 批量添加20個系統用戶賬號,用戶名稱依次爲“stu1”、“stu2”、“stu3”、……“stu20”,各用戶的初始密碼均設置爲“123456”
23 編寫一個批量刪除用戶的腳本程序,將上例中添加的20個用戶刪除。
#!/bin/bash if [ $1 == "add" ] ;then for i in `seq 1 20` do useradd stu$i >> /dev/null echo 123 | passwd --stdin stu$i echo "stu$i is create" done elif [ $1 == "del" ] ;then if [ -n `grep stu /etc/passwd` ] ;then echo "stu user is not create,please inport options add" exit 1 else for i in `seq 1 20` do userdel -r stu$i echo "stu$i is remove" done fi else echo "Please inport options add or del" fi
24 由用戶從鍵盤輸入一個字符,並判斷該字符是否爲字母、數字或者其他字符,並輸出相應的提示信息。
#!/bin/bash read -p "Please input a character: " Cha m=`echo $Cha | sed s/[a-zA-Z]//g` n=`echo $Cha | sed s/[0-9]//g` s=`echo $Cha | sed s/[a-zA-Z0-9]//g` if [ -z $m ] ; then echo "字母" elif [ -z $n ] ; then echo "數字" elif [ -z $s ] ; then echo "數字字母" else echo "your input is 特殊字符" fi
25 編寫一個shell程序,計算多個整數值的和,需要計算的各個數值由用戶在執行腳本時作爲命令行參數給出
[root@C6 ~]# cat 1.sh #!/bin/bash echo $[$1+$2+3]
26 循環提示用戶輸入字符串,並將每次輸入的內容保存到臨時文件“/tmp/input.txt”中,當用戶輸入“END”字符串時退出循環體,並統計出input.txt文件中的行數、單詞數、字節數等信息,統計完後刪除臨時文件
#!/bin/bash while true do read -p "Please input a string: " Str echo $Str >> /tmp/test.txt if [ $Str == "end" ];then break fi done wc /tmp/test.txt && rm -rf /tmp/test.txt
27 刪除系統中的stu1~stu20各用戶賬號,但stu8、stu18除外
#!/bin/bash for i in `seq 1 20` do if [ $i -eq 8 ] || [ $i -eq 18 ] ; then continue fi userdel -r stu$i >> /dev/nul echo "stu$i is remove" done
28 在腳本中定義一個help函數,當用戶輸入的腳本參數不是“start”或“stop”時,加載該函數並給出關於命令用法的幫助信息,否則給出對應的提示信息
#!/bin/bash help() { echo "Usage: "$0" start|stop" } case "$1" in start) echo "starting..." ;; stop) echo "stoping..." ;; *) help esac
29 在腳本中定義一個加法函數,用於計算兩個數的和,並調用該函數分別計算12+34、56+789的和
#!/bin/bash sum() { echo `expr $1 + $2` } sum 12 34 sum 56 789
30 從1加到100
#!/bin/bash for i in `seq 1 100` do sum=$[$sum+$i] echo $i done echo $sum