shell 腳本for

用法:
for 變量名 in 變量遍歷列表
do
循環語句
done #循環結束標誌
###########################################
實戰:用戶管理(批量添加用戶)
方法一:
vi for01_useradd.sh
userlist=$( cat user.list )
for user in $userlist
do
user_a=$(grep -w "$user" /etc/passwd | awk -F : '{print $1}')
if [ $user_a = $user ]
then
echo "the user $user is already exist."
else
useradd $user 2>> /dev/null
echo "user $user is added"
fi
done
[root@bogon ~]# cat user.list
user_1mysql

user_2
user_3
user_4
user_5
[root@bogon ~]# bash for01_useradd.sh
user user_1 is added
user user_2 is added
user user_3 is added
user user_4 is added
user user_5 is added
[root@bogon ~]#
[root@bogon ~]# cat /etc/passwd
user_1:x:1001:1001::/home/user_1:/bin/bash
user_2:x:1002:1002::/home/user_2:/bin/bash
user_3:x:1003:1003::/home/user_3:/bin/bash
user_4:x:1004:1004::/home/user_4:/bin/bash
user_5:x:1005:1005::/home/user_5:/bin/bash
批量刪除用戶:
#!/bin/bash
userlist=$(cat user.list)
for user in $userlist
do
userdel -r $user 2>> /dev/nullnginx

if [ $? = 0 ]
then
echo "the user $user is deleted"
fi
done
[root@bogon ~]# bash userdel.sh
the user user_1 is delected
the user user_2 is delected
the user user_3 is delected
the user user_4 is delected
the user user_5 is delected
[root@bogon ~]# tail -5 /etc/passwd
sddm:x:980:977:Simple Desktop Display Manager:/var/lib/sddm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/sbin/nologin
nginx:x:979:976:Nginx web server:/var/lib/nginx:/sbin/nologin
fedmsg:x:978:973:FedMsg:/usr/share/fedmsg:/sbin/nologin
[root@bogon ~]#
方法一優化:
咱們發現,在用方法一批量添加用戶時,當用戶不存在時,會有報錯信息,查看運行過程如

[root@bogon ~]# bash -x for01_useradd.sh
++ cat user.listweb

+ userlist='user_1
user_2
user_3
user_4
user_5'
+ for user in $userlist
++ grep user_1 /etc/passwd
++ awk -F : '{print $1}'
+ user_a=
+ '[' = user_1 ']'
for01_useradd.sh: line 6: [: =: unary operator expected
+ useradd user_1
+ echo 'user user_1 is added'
user user_1 is added
在進入循環後,咱們首先查找/etc/passwd下,是否存在用戶$user,
可是,在運行過程當中,咱們發現當這個用戶不存在時user_a數值爲空,判斷條件就會少了一
個比較值,而形成判斷條件爲[ = user_1 ],這時系統就會報錯
爲了不繫統報錯,咱們能夠使用-z或-n選項來判斷user_a變量是否爲空
#!/bin/bash
userlist=$(cat user.list)
for user in $userlist
do
user_a=$(grep $user /etc/passwd | awk -F : '{print $1}')sql

if
# [ $user_a = $user ]
[ ! $user_a -z ] && [ $user_a = $user ]
then
echo "the user $user is already exist."
else
useradd $user
echo "user $user is added"
fi
done
方法二:
咱們也能夠採起另一種方法,來批量添加用戶
#!/bin/bash
userlist=$(cat user.list )
for user in $userlist
do
useradd $user 2>> /dev/null
if [ $? -eq 0 ]
then
echo "123456" | passwd --stdin $user >> /dev/null
echo "useradd success!"
else
echo "the user $user is already exist."bash

done
實戰:批量測試IP地址是否連通
#!/bin/bash
ip_list=$(cat ip.list)
for ip in $ip_list
do
ping -w 3 -c 3 -i 0.2 $ip >> /dev/null
if [ $? -eq 0 ]
then
echo "the $ip is up"
else
echo "the $ip is down"
fi
done測試

相關文章
相關標籤/搜索