赵家小少爷 2019-12-07
循环需要有进入条件和退出条件,如果没有退出条件,则就会一直循环下去 for 变量 in 列表;do 循环体 done
{1..100}:生成1到100的整数列表 `command`:使用命令生成列表 Example1: #!/bin/bash # declare -i SUM=0 #指明SUM变量是一个整数型变量;变量的值为整数;指定求和变量的初始值为0 for I in {1..100};do let SUM=$[$SUM+$I] #指定SUM变量是一个整数型变量 done echo "the sum number is: $SUM" 把列表里面的1赋值给变量I,SUM变量的初始值为0,所以SUM变量的值为$SUM+$I,SUM=0+1=1;当I=2时,SUM的值为$SUM+$I=1+2=3,以此类推,退出循环的条件为I为100时,列表已经没有元素,退出循环,最后打印SUM的值,从1+2+3..100 Example2: #!/bin/bash declare -i SUM=0 declare -i SUMS=0 for i in {1..10};do NUM=$[$i%2] if [ $NUM -eq 0 ];then let SUM=$[$SUM+$i] else let SUMS=$[$SUMS+$i] fi done echo "even is: $SUM" echo "odd is: $SUMS" 计算100以内的奇数和偶数的和各是多少 Example3: #!/bin/bash declare -i SUM=0 for I in {1..100};do SUMS=$[$I%3] if [ $SUMS -eq 0 ];then SUM=$[$SUM+$I] fi done echo "$SUM" 计算100以内,3的倍数的数相加的和 Example4: #!/bin/bash if [ $# -lt 1 ];then echo "Parameters not empty" exit 8 #必须指定exit,如果不添加exit,执行完这个判断之后还会继续执行下面的判断 fi if [ $1 == ‘--add‘ ];then for i in {1..10};do if ! id user$i &>/dev/null;then useradd user$i echo "user$i" | passwd --stdin user$i &>/dev/null echo "add user$i finished" else echo "user$i exists" fi done elif [ $1 == ‘--del‘ ];then for i in {1..10};do if id user$i &>/dev/null;then userdel -r user$i echo "Delete user$i finished" else echo "no such user" fi done else echo "Input error" exit 10 fi 循环添加10个用户或者删除10个用户 Example5: #!/bin/bash if [ $1 == ‘--add‘ ];then for i in `echo "$2" | sed -n ‘s/,/ /gp‘`;do #sed后面必须加g选项,否则只搜索替代第一个,加上g是全局搜索替代 if id $i &>/dev/null;then echo "$i exists" else useradd $i echo "$i" | passwd --stdin $i &>/dev/null echo "add $i finished" fi done elif [ $1 == ‘--del‘ ];then for i in `echo "$2" | sed -n ‘s/,/ /gp‘`;do if id $i &>/dev/null;then userdel -r $i echo "delete $i" else echo "$i not exists" fi done else echo "unknow options" fi 通过--add xxx,xxx,xxx进行自定义添加和删除用户
-a:与关系 -o:或关系 !:非关系 Example: [ $# -gt 1 -a $# -le 3 ] [ $# -gt 1 ] && [ $# -le 3 ]
非(A 且 B) = (非 A) 或 (非 B) 非(A 或 B) = (非 A) 且 (非 B) Example: #!/bin/bash declare -i MAX=0 declare -i MIN=0 for i in {1..10};do MYRAND=$RANDOM #需要把RANDOM变量生成的随机数保存到另一个变量中,如果不保存,最下面的判断成立,会给MAX、MIN赋值一个新的随机数 [ $i -eq 1 ] && MIN=$MYRAND #MIN只需要参与一次循环,如果不加限制条件,MIN会参与10次循环,这样随机数会一直等于MIN,而不会小于 if [ $i -le 9 ];then echo -n "$MYRAND," #-n表示取消换行符 else echo "$MYRAND" fi [ $MYRAND -gt $MAX ] && MAX=$MYRAND #添加判断条件;如果MYRAND的值大于MAX值,则MAX的值为MYRAND的值 [ $MYRAND -lt $MIN ] && MIN=$MYRAND #如果MYRAND的值小于MIN的值,则MIN的值为MYRAND的值 done echo "$MAX,$MIN" 循环10次,生成10个随机数,取出其中的最大最小值