Linux shell基礎3

junwind發表於2021-03-09
字串測試,比較
    == 相等  [ $a == $b ]
    != , > , < 
    -n string      測試指定字串是否為空;空為真;不空為假
    -z string      測定指定字串是否不空

問題:寫一個指令碼
    傳遞一個引數(單個字元就行)給指令碼,如果引數為q,就退出指令碼;否則就顯示使用者的引數;

問題:寫一個指令碼
    傳遞一個引數(單個字元就行)給指令碼,如果引數為q/Q/quit/Quit,就退出指令碼;否則就顯示使用者的引數;
    #!/bin/bash
    #
    if [ $# -lt 1 ]; then
        echo "Usage: 10.sh ARG"
        exit 11
    fi

    if [ $1 == 'q' ]; then
        echo "Quiting..."
        exit 1
    elif [ $1 == 'Q' ]; then
        echo "Quiting..."
        exit 2
    elif [ $1 == 'quit' ]; then
        echo "Quiting..."
        exit 3
    elif [ $1 == 'Quit' ]; then
        echo "Quiting..."
        exit 4
    else
        echo $1
    fi
    更簡單的辦法:一起或判斷
    正則匹配


迴圈控制:
    迴圈一定要有進入條件和退出條件

    for迴圈
        for 變數 in 列表; do
            迴圈體
        done

        當列表被遍歷完成後,就退出

        for i in 1 2 3 4 5 6 7 8 9 10; do
            加法運算
        done
        i設為1,走一次迴圈,i設為2,再走一次迴圈,直到i設為10,走完迴圈,退出;

    生成列表:
        1. 整數列表
            {1..100}   自動會展開123,。。。100

            [root@localhost tmp]# echo {1..10}
                1 2 3 4 5 6 7 8 9 10

        2. seq命令  命令替換   `seq [起始數 [步進長度]] 結束數`
            seq 10
            seq 5 10
            seq 2 2 10
            seq 1 2 10

            `ls /etc`  也生成了一個列表


    while迴圈
    until迴圈

問題:求1加到100所有整數的和?

declare -i sum=0   宣告sum變數為整型
declare -x    宣告為環境變數

[root@localhost tmp]# cat sum.sh 
#!/bin/bash
#
declare -i sum=0

for i in {1..100}; do
    let sum=$[$sum+$i]
done

echo "the sum is: $sum."

[root@localhost tmp]# bash sum.sh
the sum is: 5050.


問題:向當前系統上的每個使用者問聲好?
lines=`wc -l /etc/passwd | cut -d' ' -f1`
for i in `seq 1 $lines`; do 
    echo "hello, `head -n $1 /etc/passwd | tail -1 | cut -d: -f1`"
done


寫一個指令碼:
1、設定變數FILE的值為/etc/passwd
2、依次向/etc/passwd中的每個使用者問好,並顯示對方的shell,形如:  
    Hello, root, your shell: /bin/bash
3、統計一共有多少個使用者
#!/bin/bash
#
file=/etc/passwd
lines=`wc -l $file | cut -d' ' -f1`
totalusers=0
for i in `seq 1 $lines`; do
    echo "Hello, `head -n $i $file | tail -1 | cut -d: -f1`, your shell: `head -n $i $file | tail -1 | cut -d: -f7`"
done

echo "total users is: $i."
------------------------------

for I in `seq 1 $LINES`; do echo "Hello, `head -n $I /etc/passwd | tail -1 | cut -d: -f1`"; done


擴充:只向預設shell為bash的使用者問聲好;並統計該使用者數
#!/bin/bash
#
file=/etc/passwd
#contents=`sed -n "/\<bash\>$/p" $file`
lines=`sed -n "/\<bash\>$/p" $file | wc -l`

for i in `seq 1 $lines`; do
    echo "Hello, `sed -n "/\<bash\>$/p" $file | head -n $i | tail -1 | cut -d: -f1`, your shell is /bin/bash."
done

echo "Total User is: $i."


寫一個指令碼:
1、新增10個使用者user1到user10,密碼同使用者名稱;但要求只有使用者不存在的情況下才能新增;
#!/bin/bash
#
for i in {1..10}; do
    #先判斷使用者是否存在
    if ! id user$i &> /dev/null; then
        useradd user$i
        echo "user$i" | passwd --stdin user$i &> /dev/null
        echo "add user$i successfull."
    else
        echo "user$i is exists."
    fi
done
擴充套件:
接受一個引數:
add: 新增使用者user1..user10
del: 刪除使用者user1..user10
其它:退出
adminusers user1,user2,user3,hello,hi


寫一個指令碼:
計算100以內所有能被3整除的正整數的和;
取模,取餘:%
3%2=1
100%55=45


寫一個指令碼:
計算100以內所有奇數的和以及所有偶數的和;分別顯示之;


let I=$[$I+1]
SUM=$[$SUM+$I]

let SUM+=$I
let I+=1 相當於 let I++
-=
let I-=1 相當於 let I--

++I, --I
*=
/=
%=


寫一個指令碼,分別顯示當前系統上所有預設shell為bash的使用者和預設shell為/sbin/nologin的使用者,並統計各類shell下的使用者總數。顯示結果形如:
BASH3users,they are:
root,redhat,gentoo

NOLOGIN, 2users, they are:
bin,ftp


#!/bin/bash
#
NUMBASH=`grep "bash$" /etc/passwd | wc -l`
BASHUSERS=`grep "bash$" /etc/passwd | cut -d: -f1`
BASHUSERS=`echo $BASHUSERS | sed 's@[[:space:]]@,@g'`

echo "BASH, $NUMBASH users, they are:"
echo "$BASHUSERS

本作品採用《CC 協議》,轉載必須註明作者和本文連結
六月的風

相關文章