设为首页 收藏本站
查看: 697|回复: 0

shell脚本编程-循环语句练习

[复制链接]

尚未签到

发表于 2018-8-27 11:14:23 | 显示全部楼层 |阅读模式
  练习:用for实现
  1、判断/var/目录下所有文件的类型
#!/bin/bash  

  
#Version:1.0
  
#Create time:2016-08-15 11:59:26
  
#Description:1、判断/var/目录下所有文件的类型
  
FILE=`ls /var/`
  
for I in $FILE
  
do
  
     if [ -f /var/$I ] ; then
  
         echo "$I is a commom file"
  
     elif [ -d /var/$I ] ; then
  
         echo "$I is a document file"
  
     else
  
         echo "$I is a other file"
  
     fi
  
done
  
unset FILE
  2、添加10个用户user1-user10,密码同用户名
#!/bin/bash  

  
  #Version:1.0
  
  #Create time:2016-08-15 12:23:52
  
  #Description:2、添加10个用户user1-user10,密码同用户名
  
  for I in `seq 10`
  
  do
  
      useradd user$I &> /dev/null
  
      echo "user$I" |passwd --stdin user$I &> /dev/null
  
      echo "user$I add success"
  
  done
  3、/etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件;分别读取每个文件,以K开头的文件输出为文件加stop,以S开头的文件输出为文件名加start;
“K34filename stop”  
“S66filename start”
  
#!/bin/bash
  

  
#Version:1.0
  
#Create time:2016-08-15 12:38:21
  
#Description:3、/etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件;分别读取每个文件,以K开头的文件输出为文件加stop,以S开头的>    文件输出为文件名加start;
  
#“K34filename stop”
  
#“S66filename start”
  
FILE=`ls /etc/rc.d/rc3.d`
  
for I in $FILE
  
do
  
     find /etc/rc.d/rc3.d -name "S*" -exec mv {} "{} start" \; &> /dev/null
  
     find /etc/rc.d/rc3.d -name "K*" -exec mv {} "{} stop" \; &> /dev/null
  
done
  4、写一个脚本,提示输入正整数n的值,计算1+2+3+…n的总和
#!/bin/bash  

  
#Version:1.0
  
#Create time:2016-08-15 13:51:02
  
#Description:写一个脚本,提示输入正整数n的值,计算1+2+3+…n的总和
  
let SUM=0
  
read -p "input num: " NUM
  
expr $NUM + 0 &> /dev/null
  
[ $? -ne 0 ] && echo "please input digitnum" && exit 100
  
[ $NUM -le 0 ] && echo "input the right num" && exit 99
  
for I in `seq $NUM`
  
do
  
     SUM=$(($SUM+$I))
  
done
  
echo "the sum is $SUM"
  
unset SUM
  
unset NUM
  5、写一个脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态
#!/bin/bash  
#Version:1.0
  
#Create time:2016-08-15 14:01:08
  
#Description:写一个脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态
  
read -p "input a IP address: " IP
  
echo "$IP" |grep -qE '^((\)\.){3}(\)$'
  
[ $? -ne 0 ] && echo "please input the right IP" && exit 100
  
IP1=`echo "$IP"|cut -d. -f1-3`
  
for I in `seq 255`
  
do
  
    ping -c1 -W1 "$IP1.$I" &> /dev/num && echo "$IP.$I is up"
  
done
  
unset IP
  
unset IP1
  6、打印九九乘法表
#!/bin/bash  
#Version:1.0
  
#Create time:2016-08-15 14:25:55
  
#Description:打印九九乘法表
  
for I in `seq 9`
  
do
  
    for J in `seq $I`
  
    do
  
        echo -ne "${I}X$J=$(($I*$J))\t"
  
    done
  
    echo
  
done
  练习:用while实现
1、求100以内所有正整数之和  
#!/bin/bash
  
#Version:1.0
  
#Create time:2016-08-15 14:36:00
  
#Description:求100以内所有正整数之和
  
let SUM=0
  
let NUM=1
  
while [ $NUM -le 100 ]
  
do
  
    SUM=$(($SUM+$NUM))
  
    NUM=$(($NUM+1))
  
done
  
echo "1+2+...+100=$SUM"
  2、通过ping命令探测172.16.250.1-254范围内的所有主机的在线状态,统计在线主机和离线主机各多少。
#!/bin/bash  
#Version:1.0
  
#Create time:2016-08-15 14:43:24
  
#Description:通过ping命令探测172.16.250.1-254范围内的所有主机的在线状态,统计在线主机和离线主机各多少。
  
let NUM=1
  
COUNT1=0
  
COUNT2=0
  
while [ $NUM -le 254 ]
  
do
  
    ping -c1 -W1 "172.16.250.$NUM" &> /dev/null
  
    if [ $? -eq 0 ];then
  
        echo "172.16.150.$NUM is up"
  
        COUNT1=$(($count1+1))
  
    else
  
        COUNT2=$(($COUNT2+1))
  
    fi
  
    NUM=$(($NUM+1))
  
done
  
    echo "total $COUNT1 is up,$COUNT2 is down"
  
unset NUM
  
unset COUNT1
  
unset COUNT2
  3、打印九九乘法表【思路:第n行执行n次】
#!/bin/bash  
#Version:1.0
  
#Create time:2016-08-15 18:32:03
  
#Description:打印九九乘法表
  
NUM=1
  
while [ $NUM -le 9 ]
  
do
  
    for I in `seq $NUM`
  
    do
  
        echo -ne "${NUM}X$I=$(($NUM*$I))\t"
  
    done
  
    NUM=$(($NUM+1))
  
    echo
  
done
  
unset NUM
  4、利用变量RANDOM生成10个随机数字,输出这个10数字,并显示其中的最大者和最小者[【思路:循环前先赋值最小值,循环次数减一】
#!/bin/bash  
#Version:1.0
  
#Create time:2016-08-15 18:40:10
  
#Description:利用变量RANDOM生成10个随机数字,输出这个10数字,并显示其中的最大者和最小者
  
let I=1
  
let MAX=0
  
let MIN=$RANDOM
  
echo $MIN
  
while [ $I -le 9 ]
  
do
  
    let NUM=$RANDOM
  
    echo "$NUM"
  
    if [ $NUM -le $MAX ];then
  
        if [ $NUM -le $MIN ];then
  
            MIN=$NUM
  
        fi
  
    else
  
        MAX=$NUM
  
    fi
  
    I=$(($I+1))
  
done
  
echo "the max num is $MAX"
  
echo "the min num is $MIN"
  
unset I
  
unset MAX
  
unset MIN
  
unset NUM
  5、打印国际象棋棋盘【思路:黑色是行数和列数相等或者行数和列数都是奇数,白色是行数和列数是一奇一偶】
#!/bin/bash  
#Version:1.0
  
#Create time:2016-08-16 14:40:00
  
#Description:打印国际象棋棋盘
  
let I=1
  
while [ $I -le 8 ]
  
do
  
    for J in `seq 8`
  
    do
  
        [ $((($I+$J)%2)) -eq 0 ] && echo -ne "\033[47m  \033[0m" || echo -ne "\033[40m  \033[0m"
  
    done
  
    I=$(($I+1))
  
    echo
  
done



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-557246-1-1.html 上篇帖子: 3.shell脚本编程之语句控制 下篇帖子: shell 脚本 之循环 for while until 和 软件包的管理 【上】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表