Bash Shell中的for循環和運算表達式應用
1、寫一個腳本 實現以下功能: 接受一個以上文件路徑作為參數, 顯示每個文件擁有的行數,總結說明本次共為幾個文件統計了其行數。
設定此腳本至少需要一個參數并給出提示,$#
表示參數的個數。
將腳本提供的所有參數組成一個列表放入for語句依次進行循環執行echo "$i has $(wc -l $i | cut -d" " -f1) lines."
,$\*
表示所有的參數。
#!/bin/bash # [ $# -eq 0 ] && echo "At least on path." && exit 1 for i in $*;do echo "$i has $(wc -l $i | cut -d" " -f1) lines." done echo "A total of $# files were counted."
2、寫一個腳本:傳遞兩個以上字符串當作用戶名; 創建這些用戶;且密碼同用戶名;總結說明共創建了幾個用戶。依然使用$#
來判斷參數個數,要求至少輸入3個字符串作為用戶名。然后將全部參數傳遞給for進行遍歷,循環執行useradd
和passwd
指令完成用戶創建,最后使用$#
顯示一共添加了多少個用戶。
#!/bin/bash # [ $# -lt 2 ] && echo "At least gave there strings." && exit 1 for i in $*;do useradd $i echo $i | passwd --stdin $i done echo "$# users added."
3、寫一個腳本,新建20個用戶,visitor1-visitor20;計算他們的ID之和。
使用for循環語句遍歷1-20的列表,依次創建用戶,然后使用for循環提取出每個用戶的ID,然后作為計算表達式的參數進行算術運算。
#!/bin/bash # for i in {1..20};do for id in $(useradd visitor$i | id -u visitor$i);do let sum+=${id} done done echo "Sum:$sum."
4、寫一腳本,分別統計/etc/rc.d/rc.sysinit、/etc/rc.d/init.d/functions和/etc/fstab文件中以#號開頭的行數之和,以及總的空白行數。
寫一個腳本可以根據給定的文件絕對路徑,計算出每個文件中以#開頭的行數和空白行數,然后求和,并顯示出來。
#!/bin/bash # [ $# -eq 0 ] && echo "At lease give one absolute path." && exit 1 for i in $*;do for n in $(grep "^#" $i | wc -l);do let sum1+=$n done done echo "There are $sum1 lines that begins with "#"." for j in $*;do for m in $(grep "^$" $j | wc -l);do let sum2+=$m done done echo "There are $sum2 space lines."
以上為運行結果示例。
5、寫一個腳本,顯示當前系統上所有默認shell為bash的用戶的用戶名、UID以及此類所有用戶的UID之和。
#!/bin/bash # grep "bash\>$" /etc/passwd | cut -d: -f1,3 for i in $(grep "bash\>$" /etc/passwd | cut -d: -f1,3 | cut -d: -f2);do let sum+=$i done echo "User ID Sum is:$sum."
以下為腳本執行結果:
[lantian@bogon ~]$ bash useridsum.sh root:0 lantian:1000 centos:1002 bash:1003 testbash:1004 user2:1006 user3:1007 mageia:1100 openstack:3003 user4:3005 user5:3006 hadoop:3007 basher:3008 user1:3010 user10:3011 user11:3012 user12:3013 user13:3014 user14:3015 user15:3016 user16:3017 user17:3018 user18:3019 user19:3020 123456789:3021 usera:3022 userb:3023 userc:3024 user90:3025 user91:3026 user92:3027 visitor1:3028 visitor2:3029 visitor3:3030 visitor4:3031 visitor5:3032 visitor6:3033 visitor7:3034 visitor8:3035 visitor9:3036 visitor10:3037 visitor11:3038 visitor12:3039 visitor13:3040 visitor14:3041 visitor15:3042 visitor16:3043 visitor17:3044 visitor18:3045 visitor19:3046 visitor20:3047 User ID Sum is:137234.
6、寫一個腳本,顯示當前系統上所有擁有附加組的用戶,并說明共有多少個此類用戶。
使用id -G USERNAME
統計其輸入幾個組ID的方式逐個判斷用戶是否有附加組,USERNAME的來源為/etc/passwd文件的第1列(cut
)截取。具體腳本如下:
#!/bin/bash # for i in $(cat /etc/passwd | cut -d: -f1);do if [ $(id -G $i | wc -w) -gt 1 ];then echo $i let count++ fi done echo "Total users:$count."
原創文章,作者:N24_lantian,如若轉載,請注明出處:http://www.www58058.com/63508
贊,幾個腳本都寫的比較好~~繼續加油~