美文网首页
Shell入门05 -- 循环语句

Shell入门05 -- 循环语句

作者: YanZi_33 | 来源:发表于2021-10-10 18:16 被阅读0次

For循环

for 变量名 in [ 取值列表 ]
do 
    循环体
done
  • 创建脚本文件for_ip.sh,内容如下:
#!/bin/bash
  
for i in {1..254}
do

 {
   ip=192.168.70.$i
   ping -c1 -W1 $ip &>/dev/null
   if [ $? -eq 0 ]; then
     echo "$ip |tee -a ip.txt"
   fi
 }&

done

wait
echo "Get IP is Finsh!!!"
  • For循环体中加入{}&可实现并发执行,不会阻塞当前shell;
  • wait保证所有的ip全部ping完成,才会执行下面的打印语句;

案例:批量创建用户

  • 创建脚本文件for_user.sh,内容如下:
#!/bin/bash

read -p "请输入用户名前缀|密码|数量: " prefix password num

if [[ ! $num =~ ^[0-9]+$ ]]; then
   echo "Error 请重新输入数字"
fi

cat <<-EOF
  您输入的用户名前缀是: $prefix
  您输入的统一密码是: $password
  您输入要创建的用户数量是: $num
EOF

read -p "您确定要创建吗? [y|n]" already

case $already in
  y|Y|yes|YES)
      for i in $(seq $num)
      do
         user_name=$prefix$i
         id $user_name &>/dev/null
         if [ $? -ne 1 ]; then
            useradd $user_name && \
            echo "$password|passwd --stdin $user_name" &>/dev/null
            echo "$user_name is OK!!!"
         fi
      done
      ;;
  n|N|no|NO)
      exit 1
      ;;
  *)
      read -p "您确定要创建吗? [y|n]" already
esac
  • for i in $(seq $num):保证num从1开始依次递增;
  • id $user_name &>/dev/null:获取指定的用户user_name的信息,不显示出来,全输入为null;
案例:以读文件的方式批量创建用户
  • 首先创建用户文件user.txt,内容如下:
SF
Liyanyan
Lijiajia
WGM
  • 然后创建脚本文件for_user02.sh,内容如下:
#!/bin/bash

for i in $(cat user.txt)
do
  id $i &>/dev/null
  if [ $? -ne 0 ]; then
     useradd $i && \
     echo "asd123" |passwd --stdin $i &>/dev/null
     echo "$i is OK!!!"
  else
     echo "$i create fail!!!"
  fi
done
  • $(cat user.txt):直接读取用户文件user.txt中的内容;

While循环

while  条件语句
do 
    循环体
done
案例:读入文件用户密码创建用户
  • 首先创建用户密码文件user02.txt,内容如下:
SF asd123
Liyanyan asd123
Lijiajia asd123456
WGM asd123456789
XHF asd1234
LXY asd12
  • 用户名与密码之间 空格 隔开;
  • 然后创建脚本文件while_user02.sh,内容如下:
#!/bin/bash

while read user
do
  u=$(echo $user|awk '{print $1}')
  p=$(echo $user|awk '{print $2}')

  id $u &>/dev/null
  if [ $? -ne 0 ]; then
     useradd $u && \
     echo "$p"|passwd --stdin $u &>/dev/null
     echo "$u is OK!!!"
  else
     echo "$u is already!!!"
  fi
done < user02.txt
  • done < user.txt:表示从 user.txt文件中读取内容,然后每一行赋值给变量user
  • up分别表示用户名与密码;

Shell内置命令

  • exit:退出整个程序;
  • break:结束当前循环;
  • continue:结束当前循环语句,接着进入下次循环;

相关文章

网友评论

      本文标题:Shell入门05 -- 循环语句

      本文链接:https://www.haomeiwen.com/subject/vdrholtx.html