目录:
1.for循环语法结构
2.for循环语句的基础实践
3.for循环语句的企业级案例
4.linux系统产生随机数的四种方法
5.select循环语句介绍及语法
6.select循环语句案例
一:for循环语法结构
第一种for循环语句为变量取值型,语法结构如下:
for 变量名 in 变量取值列表 do 指令... done
在这种for循环语句语法中,for关键字后面会有一个“变量名”,变量名依次获取in关键字后面的变量取值列表内容(以空格分隔),每次仅取一个,然后进入循环(do和done之间的部分)执行循环内的所有指令,当执行到done时结束本次循环。之后,“变量名”再继续获取变量列表里的下一个变量值,继续执行循环内的所有指令,当执行到done时结束返回,以此类推,知道取完变量列表里的最后一个值并进入循环执行到done结束为止。
第二种for循环语句称为C语言型for循环语句,其语法结构如下:
for ((expr1;expr2;expr3)) do 指令... done
二:for循环语句的基础实践
范例1:竖向打印4、3、2、1这4个数字
[root@aliyun for]# cat test.sh
#!/bin/bash
#法1
for n in 4 3 2 1
do
echo $n
done
#法2
for n in {4..1}
do
echo $n
done
#法3
for n in `seq 4 -1 1`
do
echo $n
done范例2:用for循环批量修改文件扩展名(把txt改成jpg)
[root@aliyun for]# mkdir test
[root@aliyun for]# touch test/{1.txt,2.txt,ywxi.txt}
[root@aliyun test]# ls
1.txt 2.txt ywxi.txt
[root@aliyun test]# cat gm.sh
#!/bin/bash
cd /scripts/practice/for/test
for filename in `ls|grep "txt$"`
do
mv $filename `echo $filename|cut -d . -f1`.jpg
done
[root@aliyun test]# sh gm.sh
[root@aliyun test]# ls
1.jpg 2.jpg gm.sh ywxi.jpg
#法二:
[root@aliyun test]# rename "jpg" "txt" *.jpg
[root@aliyun test]# ls
1.txt 2.txt gm.sh ywxi.txt三:for循环语句的企业级案例
范例:批量创建5个系统账号(dan01~dan05),并设置密码(密码为随机数,要求是字符和数字的混合)
1.给一个数字加0有多种实现方法
[root@aliyun ~]# seq -w 05
01
02
03
04
05
[root@aliyun ~]# echo {01..05}
01 02 03 04 05
2.要想通过脚本创建账号,必须知道如何实现无交互设置密码。如下:
[root@aliyun home]# useradd dan
[root@aliyun home]# echo 123456|passwd --stdin dan
Changing password for user dan.
passwd: all authentication tokens updated successfully.
3.密码为随机数,要求是字符和数字等的混合,方法如下:
[root@aliyun home]# echo $RANDOM
16781
[root@aliyun home]# echo $RANDOM|md5sum
1915bea3b67365818bfd16026dbc4807 -
[root@aliyun home]# echo $RANDOM|md5sum |cut -c 1-8
bfcf62b6
4.脚本示范:
[root@aliyun scripts]# cat forsz.sh
[root@aliyun for]# cat forsz.sh
#!/bin/bash
#Author:ywxi
. /etc/init.d/functions
user="dan"
passfile="/tmp/user.log"
for num in `seq -w 01 05`
do
pass="`echo "dan$RANDOM"|md5sum|cut -c 1-8`"
useradd $user$num &>/dev/null && echo "$pass"|passwd --stdin $user$num &>/dev/null && echo -e "user:$user$num\tpasswd:$pass" >> $passfile
if [ $? -eq 0 ]
then
action "$user$num is ok" /bin/true
else
action "$user$num is fail" /bin/false
fi
done
echo ------------------
cat $passfile && >$passfile
5.脚本测试
[root@aliyun for]# sh forsz.sh
dan01 is ok [ OK ]
dan02 is ok [ OK ]
dan03 is ok [ OK ]
dan04 is ok [ OK ]
dan05 is ok [ OK ]
------------------
user:dan01 passwd:0f1b6c1f
user:dan02 passwd:49a2d4f1
user:dan03 passwd:a07927fd
user:dan04 passwd:93c52f69
user:dan05 passwd:76a2dd17四:linux系统产生随机数的四种方法
法1:通过系统环境变量$RANDOM实现
[root@aliyun for]# echo $RANDOM 80 [root@aliyun for]# echo "ywxi$RANDOM"|md5sum |cut -c 1-9 8c1b842d2
法2:通过openssl产生随机数,如下:
[root@aliyun for]# openssl rand -base64 8 P49T7OjQzx4= [root@aliyun for]# openssl rand -base64 80 3NL6BL2H0Tf/QyRxn82Huf0c+/nRUu3gauTUtk0Vw1v//+gErSf30TE9mgTmrzAZ 9Jm6I0WVFhrdc/clsZALzSXL2YVDcEESjZR6dGXGtzQ=
法3:通过实践(date)获得随机数,如下:
[root@aliyun for]# date +%s%N 1528417843434360448 [root@aliyun for]# date +%s%N 1528417844647613752
法4:使用expect附带的mkpasswd生成随机数
[root@aliyun for]# mkpasswd -l 9 -d 2 -c 3 -C 3 -s 1
y1tu4E+KY
[root@aliyun for]# mkpasswd -l 9 -d 2 -c 3 -C 3 -s 1
6nyF{1kXJ
[root@aliyun for]# mkpasswd -l 9 -d 2 -c 3 -C 3 -s 1
o8^l1ZhIW
[root@aliyun for]# mkpasswd -l 9 -d 2 -c 3 -C 3 -s 1|md5sum |cut -c 2-10
130a98842
[root@aliyun for]# mkpasswd -l 9 -d 2 -c 3 -C 3 -s 1|md5sum |cut -c 2-10
c607f47d6五:select循环语句介绍及语法
select语法结构如下:
select 变量名 [ in 菜单取值列表 ] do 指令... done
select循环语句的主要作用可能就是创建菜单,在执行带select循环语句的脚本时,输出会按照数字顺序的列表显示一个菜单项,并显示提示符(默认是#?),同时等待用户输入数字进行选择。与for循环不同的是,select循环执行后出现菜单项等待用户选择(不会自动循环所有变量列表),而用户输入的只能是菜单项前面的数字序号,每输入一次对应的序号就会执行一次循环,直到变量后面对应列表取完为止。
六:select循环语句案例
范例::用select循环打印简单菜单项的多种实现方法
法1:
[root@aliyun select]# cat select1.sh
#!/bin/bash
select name in ywxi ywxi2 ywxi3
do
echo $name
done
法2:
[root@aliyun select]# cat select2.sh
#!/bin/bash
arr=(ywxi ywxi2 ywxi3)
select name in "${arr[@]}"
do
echo $name
done
法3:
[root@aliyun select]# cat select3.sh
#!/bin/bash
#Author:ywxi
select name in `ls /tmp/test`
do
echo $name
done
执行结果如下:
[root@aliyun select]# sh select3.sh
1) ywxi
2) ywxi2
3) ywxi3
#? 1
ywxi
#? 2
ywxi2
#? 3
ywxi3原文:http://blog.51cto.com/13707680/2126215