您好,登錄后才能下訂單哦!
針對變量的不同取值,分別執行不同的命令列
case 變量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
.....
*)
默認命令序列
esac
示例:
字符類型識別:
腳本如下:
[root@localhost opt]# vim test01.sh
#!/bin/bash
read -p "請輸入一個字符:" key
case $key in
[a-z]|[A-Z])
echo "你輸入的是字母"
;;
[0-9])
echo "你輸入的是數字"
;;
*)
echo "你輸入的是特殊符號"
esac
執行結果如下:
[root@localhost opt]# chmod +x test01.sh
[root@localhost opt]# ./test01.sh
請輸入一個字符:3
你輸入的是數字
[root@localhost opt]# ./test01.sh
請輸入一個字符:d
你輸入的是字母
[root@localhost opt]# ./test01.sh
請輸入一個字符:#
你輸入的是特殊符號
[root@localhost opt]#
循環結構:讀取不同的變量值,用來逐個執行同一組命令。
for 變量名 in 取值列表
do
命令序列
done
示例1:
批量添加用戶:
具體實驗如下:
[root@localhost opt]# tail -5 /etc/passwd
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
jiang:x:1000:1000:jiang:/home/jiang:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
[root@localhost opt]# vim users.txt
[root@localhost opt]# cat users.txt
zhangsan
lisi
wangwu
zhaoliu
[root@localhost opt]# vim test02.sh
[root@localhost opt]# cat test02.sh //shell腳本如下
#!/bin/bash
TMP=$(cat /opt/users.txt)
for USER in $TMP
do
useradd $USER && echo "123456" | passwd --stdin $USER &> /dev/null
done
[root@localhost opt]# chmod +x test02.sh
[root@localhost opt]# ./test02.sh
[root@localhost opt]# tail -5 /etc/passwd
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
zhangsan:x:1001:1001::/home/zhangsan:/bin/bash
lisi:x:1002:1002::/home/lisi:/bin/bash
wangwu:x:1003:1003::/home/wangwu:/bin/bash
zhaoliu:x:1004:1004::/home/zhaoliu:/bin/bash
[root@localhost opt]#
[root@localhost opt]# su zhangsan
[zhangsan@localhost opt]$ su lisi
密碼:
[lisi@localhost opt]$
示例2:
根據IP地址檢查主機狀態:
shell腳本如下:
#!/bin/bash
TMP=$(cat /opt/ipadds.txt)
for USER in $TMP
do
ping -c 3 -i 0.2 -w 3 $USER &> /dev/null
if [ $? -eq 0 ]
then
echo "$USER is up"
else
echo "$USER is down"
fi
done
循環結構:重復測試某個條件,只要條件成立則反復執行。
while 條件測試操作
do
命令序列
done
示例1:
批量添加用戶:
shell腳本如下:
#!/bin/bash
PRE="stu"
num=1
while [ $num -le 10 ]
do
useradd $PRE$num
echo "123456" | passwd --stdin $PRE$num &> /dev/dull
let num++
done
示例2:
猜商品價格:
shell腳本如下:
#!/bin/bash
TIMES=0
PRICE=$(expr $RANDOM % 1000)
while true
do
read -p "請猜價格(0-999):" money
let TIMES++
if [ $money -gt $PRICE ]
then
echo "您猜的太大"
elif [ $money -lt $PRICE ]
then
echo "您猜的太小"
else
echo "您猜對了,正確價格為:$num"
echo "您一共猜了$TIMES次"
break
fi
done
循環結構:重復測試某個條件,只要條件不成立則反復執行。
until 條件測試操作
do
命令序列
done
示例1:
計算1~50的和值:
實驗如下:
[root@localhost opt]# vim test04.sh
[root@localhost opt]# cat test04.sh
#!/bin/bash
i=0
sum=0
until [ $i -eq 51 ]
do
let sum+=i
let i++
done
echo $sum
[root@localhost opt]# chmod +x test04.sh
[root@localhost opt]# ./test04.sh
1275
[root@localhost opt]#
示例2:
為指定用戶發送在線消息:
腳本如下:
#!/bin/bash
username=$1
#判斷信息格式
if [ $# -lt 1 ];then
echo "Usage:`basename $0`<username> [<message>]"
exit 1
fi
#判斷用戶是否存在
if grep "^$username:" /etc/passwd > /dev/null
then :
else
echo "用戶不存在"
exit 1
fi
#用戶是否在線,如果不在線每5秒聯系一次
until who|grep "^$username" > /dev/null
do
echo "用戶不在線"
sleep 5
done
mes=$*
echo $mes | write $username
將命令序列按格式寫在一起可方便重復使用命令序列。
[ function ] 函數名(){
命令序列
[return x]
} //使用return或exit可以顯式地結束函數
函數名 [參數1] [參數2]
示例:
兩個數字求和:
實驗如下:
[root@localhost opt]# vim test06.sh
[root@localhost opt]# cat test06.sh
#!/bin/bash
sum(){
s=`expr $1 + $2`
echo $s
}
[root@localhost opt]# chmod +x test06.sh
[root@localhost opt]# ./test06.sh
[root@localhost opt]# sum 5 6
11
[root@localhost opt]#
數組名= (value0 value1 value2 ..)
數組名= ([0]=value [1]=value [2]=value ...) //數組元素之間使用空格隔開
列表名="value0 value1 value2 ..."
數組名= ($列表名)
數組名[0]="value”
數組名[1]="value"
數組名[2]="value"
格式:${#數組名[@\*]}
實例:
[root@localhost ~]# arr_ nymber=(1 2 3 4 5);
[root@localhost ~]#arr_ length=${#arr_ number[*]}
[root@localhost ~]# echo $arr length
5
格式:${數組名[下標]}
實例:
[root@localhost ~]#arr_ index2=${arr_ number[2]}
[root@localhost ~]# echo $arr_ index2
3
[root@localhost ~]# for v in
${arr_ number[@]}
> do
> echo $V
> done
1
2
3
4
5
語法:sh [-nvx] 腳本名
常用選項:
-n:不執行腳本,僅檢查語法。沒有語法問題不顯示任何內容,有問題提示報錯。
-v:執行腳本時,先顯示腳本內容,然后執行腳本。存在錯誤時,給出錯誤提示。
-x:將執行的腳本內容輸出到屏幕上。
set -x:開啟調節模式
set +x:關閉調節模式
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。