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 00:47
下一篇 2016-12-13 07:56

相關推薦

  • awk詳解

    —————————— 課外練習 只處理用戶ID為奇數的行,并打印用戶名和ID號 [root@localhost ~]# awk -F: '{if($3%2!=0) {print&n…

    Linux干貨 2016-09-25
  • 文件查找命令之find

    文件查找命令之find   特點:實時查找,精確查找,由于find是全磁盤文件查找所有查找速度要比locate略慢一些。   find查找功能強大,下面主要介紹find查找條件的一個重要特性–德·摩根定律     德·摩根定律      非(A &&B)=(非A…

    Linux干貨 2016-08-16
  • 數據流重導向

    數據流重導向(redirect):就是將某個指令執行后應該要出現在屏幕上的數據,傳輸到其他的位置。 standard output:標準輸出是指指令執行回傳正確的訊息。 standard error output : 指令執行失敗后,所回傳的錯誤訊息。 1標準輸入(stdin):代碼為0,使用< <<2標準輸出(stdout),代碼為1,使…

    Linux干貨 2016-08-08
  • Linux-Basic—shell如何解釋命令的運行

    附件下載: Linux Basics-shell.pdf

    Linux干貨 2016-11-21
  • 裝飾器

    裝飾器(Decorator) 裝飾器推導過程 需求 一個加法函數,想增強它的功能,能夠輸出被調用過以及調用的參數信息 def add(x,y): return x + y 增加信息輸出功能 def add(x,y): print(‘call {},{}+{}’.format(add.__name__, x, y)) return x + y 不足:打印語句的…

    2017-10-23
  • Linux磁盤管理

    一、磁盤管理總體分類  1)磁盤結構  2)分區類型  3)管理分區 4)管理文件系統  5)掛載設備 6)管理虛擬內存 ……………………………………………………………………………………………………………………… 重要分類模塊詳解 ………………………………………………………………………………………………………………………

    Linux干貨 2016-08-29

評論列表(1條)

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

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

欧美性久久久久