Shell语言学习笔记(七)—— until循环语句

在Shell中,循环命令可以重复执行一系列指令,直到某个条件被满足。Shell中常用的循环命令有for、while、until和do-while循环语句等。之前已经对for循环、while循环进行了介绍,在此对另外一种循环语句进行介绍——until循环语句。

1. until循环语句

和while循环类似,只不过是在条件不满足的情况下重复执行。

until condition
do
    command1
    command2
    ...
done

其中,condition 是一个测试条件,只要它为假,就会执行 do 和 done 之间的命令(command1,command2,……)。在执行完所有命令之后,会再次测试条件,如果仍然为假,则继续执行循环。直到条件为真时,循环才会停止。 

Shell语言学习笔记(七)—— until循环语句_第1张图片

注意:

# break 命令不执行当前循环体内break下面的语句从当前循环退出.
# continue 命令是程序在本循体内忽略下面的语句,从循环头开始执行

2. 循环语句应用实例

2.1 实例1: 输出1~5

~/shell$ cat until.sh 
#!/bin/bash

#for循环语句
echo "依据for循环输出1~5:"
for i in {1..5}
do 
  echo $i
done

#while循环语句
echo "依据while循环输出1~5:"
j=1
while [ $j -le 5 ]    
do 
  echo $j	
  j=$((j+1))      #循环变量j加一
done

#until循环语句
echo "依据until循环输出1~5:"
k=1   sum=0
str3=""
until [ $k -le 0 ] || [ $k -gt 5 ]    #条件为假,执行循环语句
do
  echo $k
  sum=$(($k+$sum))     #在循环变量自加一之前进行求和
if [ $k -eq 1 ];then   #用于输出求和的字符串的赋值和合并
  str3="$k"
else
  str3="${str3}+$k"
fi
  k=$(( $k + 1 ))      #循环变量k加一
done
echo "$str3=$sum"   #用于输出1~5求和的字符串及结果输出

~/shell$ bash until.sh 
依据for循环输出1~5:
1
2
3
4
5
依据while循环输出1~5:
1
2
3
4
5
依据until循环输出1~5:
1
2
3
4
5
1+2+3+4+5=15

2.2 实例2:自动生成一个5位随机密码 取值范围大小写字母和数字  

~/shell$ cat until.sh 
#!/bin/bash
#本文代码参考Steve lu的代码写成
#随机生成5位密码
#定义密码取之范围
string="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789"

#for循环语句 
echo "依据for循环随机生成5位密码:"
passwd_i=""
for i in {1..5}
do 
#  ${#string}表示获取string字符串的长度
#  % 为取余操作,保证生成的随机数字在string字符串的长度以内
#  RANDOM 是一个内置变量,它返回一个0~32767之间的随机整数  

num=$[RANDOM % ${#string}]   # 获取 0~string字符串长度 内的一个数字,即为string字符串中某一个字符的下标
#echo $num    #用于检查选取string字符串的某一个字符的下标
var=${string:num:1}    #截取string字符串中以下标为num的作为开始的一个字符
passwd_i="${passwd_i}${var}"    #实现每次生成字符的追加
#passwd+=$var
done
echo $passwd_i


#while循环语句
echo "依据while循环随机生成5位密码:"
j=1
passwd_j=""
while [ $j -le 5 ]    
do 
 var=${string:RANDOM%${#string}:1}
 passwd_j="${passwd_j}${var}"
  j=$((j+1))      #循环变量j加一
done
echo $passwd_j


#until循环语句
echo "依据until循环随机生成5位密码:"
k=1   
passwd_k=""
until [ $k -le 0 ] || [ $k -ge 6 ]    #条件为假,执行循环语句
do
 num=$[ RANDOM % ${#string} ]
 var=${string:num:1}
 #passwd_k="${passwd_k}${var}"
 passwd_k+=$var

  k=$(( $k + 1 ))      #循环变量k加一
done
echo $passwd_k

~/shell$ bash until.sh 
依据for循环随机生成5位密码:
zGJAM
依据while循环随机生成5位密码:
KukyL
依据until循环随机生成5位密码:
ZYIfl

在实际的使用中,根据不同的需求选择不用的循环语句进行实现即可。

RANDOM参数的简单介绍

在shell中,RANDOM是一个内置变量,它返回一个0到32767之间的随机整数。每一次调用$RANDOM 都会生成一个新的随机数。可以使用 echo  $RANDOM 来查看生成的随机数。

echo $RANDOM

运行结果:
15288     #生成一个随机数
# 随机生成5个一位数
for i in {1..5}
do
    echo $((RANDOM % 10))     # %运算符用于将$RANDOM生成的随机数限制在0到9之间
done
 
运行结果:
6
5
4
8
7

# 随机生成5个两位数
for i in {1..5}
do
    echo $((RANDOM % 100))     # %运算符用于将$RANDOM生成的随机数限制在10到99之间
done
 
运行结果:
26
99
96
38
29
#  $((RANDOM%10))中的表达式会生成一个 0-9 之间的随机数,
#  然后再加上 1,使得最终结果在 1-10 之间。

random_num=$((RANDOM%10+1))
echo $random_num

运行结果:
4

 3. 变量的自增

Linux Shell中写循环时,不免会涉及到变量的自增。现在总结一下整型变量自增的方法。bash中变量自增的方法有如下几种:

 i=`expr $i + 1`
 let i+=1 
 let i++
 ((i++)) 
 i=$[$i+1]
 i=$(( $i + 1 ))

4. 编写脚本应该注意的事项:

  1. 开头指定使用什么shell,例如:bash,sh 等
  2. 脚本功能描述,使用方法,作者,版本,日期等
  3. 变量名,函数名要有实际意义,函数名以动名词形式,第二个单词首字母要大写。例如:updateConfig()
  4. 缩进统一用4个空格,不用 TAB
  5. 取变量值使用大括号,如 ${varname}
  6. 删除文件时,如果路径有变量的,要判断变量有值,如 rm -f ${abc}/*  如果变量abc没有值,则会把根目录下的文件删除
  7. 脚本中尽量不要使用cd变换目录
  8. 函数中也要有功能描述,使用依法,版本,日期等
  9. 函数的功能要单一,不要太复杂
  10. $()比` `更好
  11. 尽量不要使用多层if语句,而应该以case语句替代
  12. 如果需要执行确定次数的循环,应该用for语句替代while语句
  13. 输入的参数要有正确性判断
  14. 多加注释,方便自己或他人阅读。

 参考链接:https://www.jb51.net/article/243933.htm

你可能感兴趣的:(shell语言学习,学习,笔记,linux,bash)