字串測試,比較
== 相等 [ $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} 自動會展開1,2,3,。。。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下的使用者總數。顯示結果形如:
BASH,3users,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 協議》,轉載必須註明作者和本文連結