Bash Shell中的for循環和運算表達式應用

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進行遍歷,循環執行useraddpasswd指令完成用戶創建,最后使用$#顯示一共添加了多少個用戶。

#!/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."

Bash Shell中的for循環和運算表達式應用

以上為運行結果示例。

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

(0)
N24_lantianN24_lantian
上一篇 2016-12-13
下一篇 2016-12-13

相關推薦

  • ?N25第三周作業

    第三周 一、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@zf ~]# who | cut -d " " -f1  | sort | uniq -…

    Linux干貨 2016-12-14
  • awk中pipe的shell命令調用與close()

        某公司其員工到勤時間表如下, 取名為 arr.dat, 文件中第一欄為員工代號, 第二欄為到達時間. 本示例中將使用該文件為數據示例文件, 1034 7:26 1025 7:27 1101 7:32 1006 7:45 1012 7:46 1028 7:49 1051 7:51 1029 7:57 1042 7…

    Linux干貨 2016-11-11
  • 一鍵獲取MySQL賬戶及相關的權限

    有時候,運維同學可能在做grant授權時候,給的用戶權限太高了,有風險。因此,我們接手服務器后有必要檢查一遍用戶權限。 #!/bin/bash# 一鍵獲取MySQL賬戶及相關的權限 user=’root’ password=’123456′ MYSQL_CMD=’/usr/local/mysql/b…

    Linux干貨 2017-05-07
  • 軟件包管理2

    四、程序包編譯     程序包編譯安裝:     Application-VERSION-release.src.rpm –> 安裝后,使用rpmbuild命令制作成二進制格式的rpm包,而后再安裝     源代碼&#82…

    Linux干貨 2016-08-27
  • 函數式編程

    當我們說起函數式編程來說,我們會看到如下函數式編程的長相: 函數式編程的三大特性: immutable data 不可變數據:像Clojure一樣,默認上變量是不可變的,如果你要改變變量,你需要把變量copy出去修改。這樣一來,可以讓你的程序少很多Bug。因為,程序中的狀態不好維護,在并發的時候更不好維護。(你可以試想一下如果你的程序有個復雜的狀態,當以后別…

    Linux干貨 2016-08-15
  • 馬哥教育網絡班20期+第6周課程練習

    vim編輯器使用總結 一、文件的打開與關閉             打開文件:                 # vim [OPTION]… FILE…      …

    Linux干貨 2016-07-17

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-12-23 00:44

    贊,幾個腳本都寫的比較好~~繼續加油~

欧美性久久久久