linux shell循环:for、while、until用法详解

2019-09-23 08:51:54刘景俊

方法四:

#!/bin/bash
#彩色闪烁山角形
read -p "请输入三角形边长: " w
for (( i=1;i<=$w;i++ )); do
    for(( j=$w;j>$i;j-- ));do
        echo -n " "
    done
    for (( m=1;m<=i;m++  ));do
        we=`cat /dev/urandom |tr -dc '1-6' |head -c 1 `
        echo -e "33[3"$we";5m♥33[0mc"  #红色加闪烁
        done
    echo

done

添加10个用户user1-user10,密码为8位随机字符、

#!/bin/bash
> /root/user.log
for i in {1..10};do  
  useradd user$i && echo user$i is created
  pass=$(cat /dev/urandom |tr -dc '0-9a-zA-Z!@_#?.,' |head -c 16)  #生成随机数
  echo user$i:---pass:$pass >> /root/user.log
  echo $pass |password --stdin user$i &> /dev/null
done

/etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件;分别读取每个文件,以K开头的输出为文件加stop,以S开头的输出为文件名加start,如K34filename stop S66filename start

#!/bin/bash
for i in $(ls /etc/rc.d/rc3.d/);do  #查看文件内容确定循环次数
    if [[ $i =~ ^K.* ]];then
        echo "$i stop"
    elif [[ $i =~ ^S.* ]];then
        echo "$i start"
    fi
done
[root@centos6mini app]# ./linshi 
K05wdaemon stop
K10saslauthd stop
K15htcacheclean stop
K15httpd stop
K30spice-vdagentd stop
K50dnsmasq stop
K50kdump stop
K73winbind stop
K74ntpd stop
...省略...

编写脚本,提示输入正整数n的值,计算1+2+…+n的总和

#!/bin/bash
read -p "请输入一个正整数" s
w=0
if [[ "$s" =~ ^[0-9]+$ ]] ;then
  for i in $(seq 1 $s) ;do
  w=$[$w+$i]           
  
  done
  echo "整数1到$s的和为$w"
else echo "请输入正整数"
fi

计算100以内所有能被3整除的整数之和

方法一:

[root@centos6mini app]# echo {3..100..3} |tr " " "+"|bc #进行步进,替换相加
1683

方法二:

#!/bin/bash
for i in {3..100..3};do  #步进,相加
 n=$[$n+$i] &> /devnull
 done
echo $n

方法三:

#!/bin/bash
sum=0
for n in $(seq 1 100);do
    i=$[$n/3]  #进行相除
    y=$[3*$i]  #进行相乘 、运算成功则成立
    if [ $y -eq $n ];then
        sum=$[$n+$sum]
    fi
done 
    echo $sum

方法四:

sum=0
for i in {1..100};do
  if [ $[$i%3] -eq 0 ];then #相除取余进行判定
  let sum+=$i  #进行加法运算
  fi 
done
echo $sum

打印九九乘法表

for (( i=1 ;i<=9;i++ ));do
    for ((n=1;n<=9;n++)) ;do
        w=0
        w=$[$n*$i]
    if [ $n -le $i  ];then
    echo -n " $i*$n=$w "
    fi
    done
echo
done

在/testdir目录下创建10个html文件,文件名格式为数字N(从1到10)加随机8个字母,如:1AbCdeFgH.html

方法一:

#!/bin/bash
cd /testdir &> /dev/null
if [ ! $(echo $?) -eq 0 ] ;then  #判断文件是否存在
  mkdir /testdir &> /dev/null
fi

for i in $(seq 1 10 );do
  w=$(cat /dev/urandom |tr -dc '0-9a-zA-Z!@_#?.,' |head -c 8)
  touch $i$w.html
done