溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

shell腳本基礎(chǔ)知識梳理<四>:流程控制 for

發(fā)布時間:2020-07-22 21:46:04 來源:網(wǎng)絡(luò) 閱讀:187 作者:wx5cb5dcd871bbc 欄目:系統(tǒng)運維

for語句的使用格式
for var in n1,n2,nn
do
指令1
指令2
...
done

for var in item1 item2 ... itemN; do command1; command2… done;

實例1
#!/bin/bash
#使用字面字符串
for x in centos ubuntu gentoo opnesuse
do
echo "$x";
done

#若列表中包含空格字符必須使用引號包含起來
for x in Linux "Gnu Hurd" FreeBSD "Mac OS X"
do
echo "$x";
done
#eval 變量引用
for x in ls "df -h" "du -sh"
do
echo "===$x==" ; eval $x
done

運行結(jié)果
[root@localhost shell]# sh for1.sh
centos
ubuntu
gentoo
opnesuse
Linux
Gnu Hurd
FreeBSD
Mac OS X
===ls==
case2.sh case4.sh for1.sh if-elif.sh liu myshell1.sh
case3.sh case.sh if-elif-if-else.sh if-if.sh liub qq
===df -h==
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 27G 5.9G 22G 22% /
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 1014M 133M 882M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
===du -sh==
36K .
[root@localhost shell]#

實例2

!/bin/bash
#使用變量
i=1
weekdays="Mon Tue Wed Thu Fri"
for day in $weekdays ; do
echo "Weekday $((i++)) : $day"
done

#默認是空格若不設(shè)定輸出的結(jié)果是

#Linux
#'Gnu
#Hur'
#FeeBSD
#'Mac
#OS
#X'
#Others

#設(shè)定IFS

IFS=:
OSlist="Linux:'Gnu Hur':FeeBSD:'Mac OS X'"
for x in $OSlist Others; do
echo "$x"
done

運行結(jié)果
[root@localhost shell]# sh for2.sh
Weekday 1 : Mon
Weekday 2 : Tue
Weekday 3 : Wed
Weekday 4 : Thu
Weekday 5 : Fri
Linux
'Gnu Hur'
FeeBSD
'Mac OS X'
Others
[root@localhost shell]#

實例3

#!/bin/bash
#使用位置變量$@, in $@可以省略

i=1
for day;do
echo -n "位置參數(shù) $((i++)): $day "
case $day in
[Mm]on|[Tt]ue|[Ww]ed|[Tt]hu|[Ff]ri)
echo " (weekday)"
;;
[Ss]at|[Ss]un)
echo " (weekeno)"
;;
*)
echo " (Invalid weekday)"
;;
esac
done

輸出結(jié)果

[root@zabbix shell]# sh for3.sh mon tue wed thu fri sat sun
位置參數(shù) 1: mon (weekday)
位置參數(shù) 2: tue (weekday)
位置參數(shù) 3: wed (weekday)
位置參數(shù) 4: thu (weekday)
位置參數(shù) 5: fri (weekday)
位置參數(shù) 6: sat (weekeno)
位置參數(shù) 7: sun (weekeno)

實例4

#!/bin/bash
#使用文件名或目錄
for frname in *
do
#使用命令替換成小寫文件名并賦予給變量fn;
fn=$(echo $frname | tr A-Z a-z)
#判斷新生產(chǎn)的文件名是否與原名相同,若不同改成小寫
if [[ $frname != $fn ]];then mv $frname $fn;fi
#[[ $frname != $fn ]]&& mv $frname $fn
#[[ $frname == $fn ]] || mv $frname $fn
done

運行結(jié)果

[root@zabbix shell]# touch ABC
[root@zabbix shell]# mkdir qwe
[root@zabbix shell]# sh for4.sh
[root@zabbix shell]# ll
總用量 8
-rw-r--r-- 1 root root 0 8月 26 15:23 abc
-rw-r--r-- 1 root root 330 8月 26 15:11 for3.sh
-rw-r--r-- 1 root root 218 8月 26 15:23 for4.sh
drwxr-xr-x 2 root root 6 8月 26 15:23 qwe

實例5

#!/bin/bash
for i in *.zip
do
#去掉尾部是.zip部分
j="${i%.zip}";mkdir "$j" && unzip -d "$j" "$i"
echo $j
#j="${i%.zip}"
#echo $j
done

執(zhí)行結(jié)果

[root@zabbix shell]# sh for5.sh
Archive: adf.zip
extracting: adf/abc
inflating: adf/for3.sh
inflating: adf/for4.sh
extracting: adf/qq.zip
creating: adf/qwe/
extracting: adf/we.zip
adf
Archive: qq.zip
extracting: qq/abc
inflating: qq/for3.sh
inflating: qq/for4.sh
creating: qq/qwe/
extracting: qq/we.zip
qq
Archive: we.zip
extracting: we/abc
inflating: we/for3.sh
inflating: we/for4.sh
creating: we/qwe/
we

實例 6

!/bin/bash
#用命令的執(zhí)行結(jié)果作為列表
i=1
for usrname in awk -F: '{print $1}' /etc/passwd
do
echo "Username $((i++)) : $usrname"
done
echo "***"
for line in $(cat /etc/yum.conf|egrep -v "^/|^#")
do
echo "$line"
done

echo "seq 生成序列"
for suffix in $(seq 5)
do
echo "192.168.1.${suffix}"
done

echo "***"
for f in $(ls /var/);do
echo $f
done

執(zhí)行結(jié)果

Username 10 : operator
Username 11 : games
Username 12 : ftp
Username 13 : nobody
Username 14 : systemd-network
Username 15 : dbus
Username 16 : polkitd
Username 17 : sshd
Username 18 : postfix
Username 19 : chrony
Username 20 : www
Username 21 : mysql
Username 22 : saslauth
Username 23 : zabbix
Username 24 : grafana
Username 25 : ntp


[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_repo
rt_page.php?category=yum
distroverpkg=centos-release


192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5


adm
cache
crash
db
empty
games
gopher

實例7

#!/bin/bash
#判斷host
for host in cat /etc/hosts
do
if ping -c1 -w2 $host &>/dev/null
then
echo "Host (${host}) is active."
else
echo "Host (${host}) is down."
fi
done

執(zhí)行結(jié)果

root@zabbix shell]# sh for7.sh
Host (127.0.0.1) is active.
Host (localhost) is active.

實例8

#!/bin/bash
#使用數(shù)值
myip="192.168.0"
for num in {1..5}
do
echo "IPAddr $num: $myip.$num"
done

#步長
for num in {1..10..2}
do
echo "Number: $num"
done

執(zhí)行結(jié)果

[root@zabbix shell]# sh for8.sh
IPAddr 1: 192.168.0.1
IPAddr 2: 192.168.0.2
IPAddr 3: 192.168.0.3
IPAddr 4: 192.168.0.4
IPAddr 5: 192.168.0.5
Number: 1
Number: 3
Number: 5
Number: 7
Number: 9

實例 9

#!/bin/bash
for x in {1..5}
do
useradd user${x}
#stdin是接收echo后面的字符串作為密碼。stdin是非交換直接傳入密碼
#passwd 默認是要用終端作為標準輸入。加上--stdin可以用任意的做標準輸入
echo "centos"|passwd --stdin user${x}
#使用戶第一登陸修改密碼;chage密碼失效命令 -d 上次更改的時間
chage -d 0 user${x}
done

執(zhí)行結(jié)果

[root@localhost shell]# sh for3.sh
Changing password for user user1.
passwd: all authentication tokens updated successfully.
Changing password for user user2.
passwd: all authentication tokens updated successfully.
Changing password for user user3.
passwd: all authentication tokens updated successfully.
Changing password for user user4.
passwd: all authentication tokens updated successfully.
Changing password for user user5.
passwd: all authentication tokens updated successfully.
[root@localhost shell]# ls /home/
user1 user2 user3 user4 user5

重新開個終端用新的用戶等如: user1
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user user1.
Changing password for user1.
(current) UNIX password:

實例 10

!/bin/bash
#for嵌套
for i in 0 1;do
for suffix in {1..5}
do
ip=192.168.$i.${suffix}
if ping -c1 -w2 $ip &>/dev/null
then
echo "$ip is active."
else
echo "Host ($ip) is down."
fi
done
done

執(zhí)行結(jié)果

[root@localhost shell]# sh for4.sh
Host (192.168.0.1) is down.
Host (192.168.0.2) is down.
Host (192.168.0.3) is down.
Host (192.168.0.4) is down.
Host (192.168.0.5) is down.
Host (192.168.1.1) is down.
Host (192.168.1.2) is down.
Host (192.168.1.3) is down.
Host (192.168.1.4) is down.
Host (192.168.1.5) is down.

實例 11

#!/bin/bash
#C語言方式
for ((i=0;i<10;i++))
do
echo $i;
done

for (( i=1; i <= 10; i++ ))
do
echo "$i: $RANDOM"
done

for ((i=1,j=10; i <=5 ; i++, j=j+5))
do
echo "number $i: $j"
done

執(zhí)行結(jié)果

[root@localhost shell]# sh for-c.sh
0
1
2
3
4
5
6
7
8
9
1: 15561
2: 14731
3: 31575
4: 15783
5: 17317
6: 3162
7: 5176
8: 4272
9: 5116
10: 2811
number 1: 10
number 2: 15
number 3: 20
number 4: 25
number 5: 30

實例 12

#!/bin/bash
#
#C語言格式for
s=0
for ((i=1;i<=100;i++))
do
let s=$s+$i
done
echo sum(1..100)=$s

for ((s=0,i=1;i<=100;i++))
do
((s+=i))
done
echo sum(1..100)=$s

for ((s=0,i=1;i<=100;s+=i,i++))
do
:
done
echo sum(1..100)=$s

執(zhí)行結(jié)果

[root@localhost shell]# sh for-c2.sh
sum(1..100)=5050
sum(1..100)=5050
sum(1..100)=5050

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI