简单shell脚本编程示例(循环)

for循环

for 变量名in 列表;do

循环体

done

执行机制:

依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束

列表生成方式:

(1) 直接给出列表

(2) 整数列表:

(a) {start..end}

(b) $(seq[start [step]] end)

(3) 返回列表的命令

$(COMMAND)

(4) 使用glob,如:*.sh

(5) 变量引用;

[email protected], $*

1、判断/var/目录下所有文件的类型

#!/bin/bash
for filename in /var/* ;do
    if [ -L "$filename" ] ;then
        echo "$filename is link file"
    elif [ -f "$filename" ];then
        echo "$filename is common file"
    elif [ -b "$filename" ];then
        echo "$filename is block file"
    elif [ -c "$filename" ];then
        echo "$filename is char file"
    elif [ -S "$filename" ] ;then
        echo "$filename is socket file "
    elif [ -d "$filename" ] ;then
        echo "$filename is directory"
    else
        echo "Unknow"
    fi
done

#!/bin/bash
for f1 in /var/* ; do
    ff=`ls -ld $f1 | cut -c1`
    case $ff in
    l)
        echo "$f1 is link file"
    ;;
    b)
        echo "$f1 is blcok file "
    ;;
    c)
        echo "$f1 is char file"
    ;;
    s)
        echo "$f1 is socket file"
    ;;
    -)
        echo "$f1 is file"
    ;;
    d)
        echo "$f1  is dir"
    ;;
    *)
        echo "$f1  is other "
    esac
done

2、添加10个用户user1-user10,密码同用户名

#!/bin/bash
#添加10个用户user1-user10,密码同用户名
for i in {1..10};do
 id user$i &>/dev/null
    if [ $? -eq 0 ];then
        echo "user$i is exist"
    else
        useradd user$i
        echo "user$i" | passwd --stdin user$i &> /dev/null
        echo "Add user$i finished "
    fi  
done

删除上述用户

#!/bin/bash
for i in {1..10} ; do
id user$i &> /dev/null
    if [ $? -eq 0 ];then
        userdel -r user$i
        echo "user$i is delete"
    else
        echo "user$i is not exist"
    fi  
done

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

#!/bin/bash
#/etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件;分别读取每个文件,以K开头的文件输出为文件加stop,以S开头的文件输出为文件名加start;
for filename in /etc/rc.d/rc3.d/* ;do 
  ff=`basename "$filename" | cut -c1`
    case $ff in  
    [Kk])
        echo "$filename stop"
    ;;  
    [Ss])
        echo "$filename start"
    ;;  
    *)  
        echo "other"
    esac
done

4、写一个脚本,提示输入正整数n的值,计算1+2+3+…n的总和

#!/bin/bash
read -p "please a number: " n1
if [[ $n1 =~ ^-?[[:digit:]]+$ ]];then
    if [ $n1 -gt 0 ];then
        sum=0
        for i in `seq $n1` ;do 
        sum=$[$sum+$i]
        done    
        echo "sum is $sum"
    else
        echo "$n1 is not positive integer "
    fi  
else 
    echo "need a number" 
fi

5、写一个脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态

#!/bin/bash
read -p "Please input a IP :" ip
i=`echo $ip|cut -d. -f1-3`.
if [[ $ip =~  ^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){2}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$ ]] ;then
    for j in {1..255} ;do 
    ping -c1 -W1 $i$j &> /dev/null && echo "$i$j is on " || echo "$i$j is off "
    done
else
    echo "this is not IP"
fi
~

6、打印九九乘法表

#!/bin/bash
i=1
for i in {1..9};do
    for j in `seq $i` ;do 
        echo -ne "$j*$i=$[$i*$j]\t"
    done
    echo
done

while循环

while CONDITION; do

循环体

done

CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false”终止循环

因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正

进入条件:CONDITION为true;

退出条件:CONDITION为false


1、求100以内所有正整数之和

#!/bin/bash
i=1
sum=0
while [ $i -le 100 ];do
    sum=$[$sum+$i]
    let i++ 
done
    echo "sum is $sum"

2、通过ping命令探测172.16.250.1-254范围内的所有主机的在线状态,统计在线主机和离线主机各多少.

#!/bin/bash

read -p "Please input IP " ip
i=`echo $ip | cut -d. -f1-3`.
j=0
if echo $ip | egrep "^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){2}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$" ;then
    while [ $j -le 255 ] ;do
        ping -c1 -W1 $i$j &> /dev/null  && echo "$i$j is on" ||     echo "$i$j is off"
        let j++ 
    done
 else 
    echo "This isn‘t IP"
fi

3、打印九九乘法表

#!/bin/bash
i=1
while [ $i -lt 10 ] ;do
    j=1 
    while [ $j -le $i ] ;do
        echo -ne "$i*$j=$[$i*$j]\t"
        let j++ 
    done
    echo
    let i++ 
done

4、利用变量RANDOM生成10个随机数字,输出这个10数字,并显示其中的最大者和最小者

#!/bin/bash
i=1
a=$RANDOM
max=$a
min=$a
while [ $i -le 10 ];do
    [ $max -le $a ] && max=$a
    [ $min -ge $a ] && min=$a
    echo "$a"
    a=$RANDOM
    let i++ 
done
echo "max number is $max"
echo "min number is $min"
~

5、打印国际象棋棋盘

#!/bin/bash
i=1
while [ $i -le 8 ];do
     j=1 
    while [ $j -le 8 ];do
        sum=$[$i+$j]
      n=$[$sum%2]
        if [ $n -eq 0 ];then
            echo -ne "\033[41;1m  \033[0m"
        else
            echo -ne "\033[43;1m  \033[0m"
        fi  
     let j++ 
    done
    let i++ 
    echo
done

until循环

until CONDITION; do

循环体

done

进入条件:CONDITION 为false

退出条件:CONDITION 为true

1、每隔3秒钟到系统上获取已经登录的用户的信息;如果发现用户hacker登录,则将登录时间和主机记录于日志/var/log/login.log中,并提示该用户退出系统。

#!/bin/bash
until who | grep  -q "^hacker\>"   ; do
sleep 3
done
who| grep "^hacker\>"| tr -s " " | cut -d " " -f3-5 >> /var/log/login.log
echo "you should logout" | mail hacker
echo "hacker is login"

2、随机生成10以内的数字,实现猜字游戏,提示比较大或小,相等则退出。

#!/bin/bash
read -p "Guess number! Please enter a numer{0-10}: " n
if [[ $n =~ ^[[:digit:]]+$ ]] ;then
    i=$[$RANDOM%11]
    until [ $n -eq $i ] ; do
        if [ $n -gt $i ] ; then
            echo "It‘s too large "
        else 
            echo "It‘s too small "
        fi  
        read -p "Try again:" n
    done
    echo "you are right!!!"
else
    echo "please input a number !!!"
fi

1、写个脚本:打印等腰三角形

#!/bin/bash
read -p "please input a line number " n
if [[ "$n" =~ ^[[:digit:]]+$ ]] ;then 
    for i in `seq $n` ;do   
        for j in `seq $[$n-$i]`;do
            echo -n " "
        done
        for k in `seq $[$i*2-1]`;do
            echo -n "*"
        done
        echo
        let i++ 
    done
else
    echo "need a number!"
    exit 2
fi

2、用until循环实现国际象棋棋盘

#!/bin/bash
i=1
red="\033[41;1m  \033[0m"
yellow="\033[43;1m  \033[0m"
until [ $i -gt 8 ] ;do
    j=1 
    until [ $j -gt 8 ] ;do
        sum=$[$i+$j]
        z=$[$sum%2]
        if [ $z -eq 0 ] ;then
            echo -ne "$red"
        else 
            echo -ne "$yellow"
        fi  
        let j++ 
    done
    let i++ 
    echo
done

时间: 2024-08-07 21:17:45

简单shell脚本编程示例(循环)的相关文章

简单shell脚本编程示例

1.编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小. 脚本内容: 执行结果: 2.编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root/etcYYYY-mm-dd中 脚本内容: 执行结果: 3.编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值 脚本内容: 执行结果: 4.编写脚本/root/bin/links.sh,

shell脚本编程之循环语句

在运行脚本时重复执行一系列的命令是很常见的,这时我们就需要使用循环语句来达到这个目的. 一.for命令 格式:for 变量 in 列表:do 循环体 done for命令会遍历列表中的每一个值,并且在遍历完成后退出循环. 列表形式有以下几种: 1.在命令中定义的一系列的值: 2.变量: 3.命令: 4.目录: 5.文件. 实例1: 上例中使用{初始值..结束值}格式来表示一个区间的数值. 实例2:以变量作为列表: 实例3:用命令生成列表: 上例中使用seq命令来生成列表,seq命令的格式为:se

shell脚本编程之循环控制语句(continue/break/sleep)

循环控制语句: continue:提前结束本轮循环,而直接进入下一轮循环判断: while  CONDITION1; do CMD1 ... if  CONDITION2; then continue fi CMDn ... done 示例:求100以内所有偶数之和: #!/bin/bash # declare -i evensum=0 declare -i i=0 while [ $i -le 100 ]; do     let i++     if [ $[$i%2] -eq 1 ]; th

SHELL脚本编程进阶(二)

写在前面(最重要) 本文部分资料和示例援引自以下书籍.在此,感谢原作者的创作,以及所有译者的付出,向他们致敬. Advanced Bash-Scripting Guide <高级Bash脚本编程指南>Revision 10中文版 Linux脚本编程执导 其中 <高级Bash脚本编程指南>Revision 10中文版 是 <Advanced Bash-Scripting Guide> 的中文翻译版,文档翻译正在进行中,再次感谢译者付出. 前言 在之前的文章 Linux 基

shell脚本编程高级篇

SHELL脚本编程进阶循环执行:简单来说就是把一些指令重复循环. 循环代码具体的指令有三种: for , while , until其中for, while用的最多.for循环 for 变量名 in 列表;do 循环体 done 关键字的帮助都是用help来查询.for循环语法:在shell编程中 for,in,do,done.这些都是他的关键字,其中循环的指零就放在do和done之间.WORDS决定了循环次数.循环的次数由in 后面跟的WORDS(字符串)的数量决定.字符串的个数决定了do和d

shell脚本编程之循环控制结

shell脚本编程之循环控制结构 循环控制之for循环 语法结构1 for  Variable  in List do commands done 语法结构2 for  Variable  in List:do commands done 这个List可以为列表.变量.命令 等等 for循环    事先提供一个元素列表,而后,使用变量去遍历此元素列表,每访问一个元素,就执行一次循环体,直到元素访问完毕 1.for循环中的List为列表 eg1:   显示/etc/inittab, /etc/rc

8.17_Linux之bash shell脚本编程入门篇(三)之循环以及函数function的使用

bash shell脚本编程入门篇(三)之循环 什么是循环执行? 将某代码段重复运行多次 重复运行多少次: 循环次数事先已知 循环次数事先未知 有进入条件和退出条件 相关命令:for, while, until,selet, for命令的使用 作用: 依次将列表中的元素赋值给"变量名"; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束 命令格式: for 变量名 in 列表; do 循环体(正常执行的执行命令) 语句1 语句2 语句3 ... done 列表生成方式: (

Shell脚本编程及示例和例题解析

Shell脚本的说明: shell脚本编程,实际上就是用vim编辑器编辑一个以.sh为结尾的脚本文件,在此脚本文件中使用Linux内部的一个或多个命令,通过编程语言以脚本运行的方式,一次性运行一次一个.一次多个或多次多个命令进行运算,并输出结果,及添加直观的注释. Shell脚本的编辑标准格式: 使用vim编辑器编辑一个自定义创建的文件名并以.sh格式结尾->    #!/bin/bash    #    脚本主体  \\脚本主体可直接编辑输入参数.命令.函数.shell编程语言等.且脚本主体所

shell脚本编程的选择分支结构

选择执行结构: if语句单分支结构:如果条件为真,则执行then后的命令,否则,不做任何操作: if CONDITION :then STATEMENT fi 或 if CONDITION ; then STATEMENT1 STATEMENT2 ... fi 注意:想要执行then后面的STATEMENTS,前提条件是CONDITION部分为真: if语句的双分支结构:如果条件为真,就执行then后面的命令:否则就执行else后面的命令: if CONDITION ; then STATEME