shell 脚本汇总 (持续更新中)

1、计算从1到100所有整数的和

[root@gcc?~]#vim test1.sh
#!/bin/bash              
#this is zhengshuhe    
sum=0                  
for i in {1..100}        
do                       
  sum=$[$i+$sum]         
done                    
echo $sum               

[root@gcc ~]#chmod +x test1.sh      
[root@gcc ~]#./test1.sh             
5050                                
[root@gcc?~]#vim test7.sh
#!/bin/bash
a=1
sum=0
while [ $a -le 100 ]         
do
  sum=$[$sum+$a]
  let a++                    
done
echo $sum

[root@gcc ~]#sh test7.sh 
5050

2、提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和

方法一:

[root@gcc ~]#vim demo3.sh 
#!/bin/bash
read -p "请输入1-100之间的一个整数:" a
sum=0
for ((i=1;i<=a;i++))
do
   sum=$[$sum+$i]
done
echo "从1到$i的整数和为:$sum"

[root@gcc ~]#sh demo3.sh 
请输入1-100之间的一个整数:3
从1到4的整数和为:6

方法二:

[root@gcc ~]#vim demo3.sh 
#!/bin/bash
sum=0
read -p "请输入1-100之间的一个整数:" a
while [ $a -ge 1 ]
do
  sum=$[$sum+$a]
  let a--
done
echo "从1到$a的整数和为

[root@gcc ~]#sh demo3.sh 
请输入1-100之间的一个整数:3
从1到0的整数和为:6

3、求从1到100所有整数的偶数和、奇数和

方法一:

[root@gcc ~]#vim demo4.sh
#!/bin/bash
a=0
b=0
for i in {0..100..2}
do
   a=$[$a+$i]
done
echo "所有整数和为:$a"
for i in {1..100..2}
do
  b=$[$b+$i]
done
echo "所有奇数和为:$b"

[root@gcc ~]#sh demo4.sh 
所有整数和为:2550
所有奇数和为:2500

方法二:

[root@gcc ~]#vim demo4.sh

#!/bin/bash
jishuhe=0
oushuhe=0
i=1
p=0
while [ $i -le 100 ] 
do
   jishuhe=$[$jishuhe+$i]
   let i=$[$i+2]
done
echo "所有奇数和为:$jishuhe"

while [ $p -le 100 ]
do
  oushuhe=$[$oushuhe+$p]
  let p=$[$p+2]
done
echo "所有偶数和为:$oushuhe"

[root@gcc ~]#sh demo4.sh 
所有奇数和为:2500
所有偶数和为:2550

4、写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。

#!/bin/bash
#shang ping xuan gou
echo "================================="
echo "------WELCOME-GCC-MARKET---------"
echo "=================================" 
read -p "您是否进入商店进行购物?(yes/no)" INT
   while [ $INT = "yes" ]
     do
       echo "1.衣服500元"
       echo "2.裤子400元"
       echo "3.鞋子350元"
       echo "4.帽子150元"
       echo "5.袜子50元"

       read -p "请问你要购买哪种商品?(请输入序号)" node
       read -p "是否继续购买?(yes/no)" INT
     case $node in
     1)
     let cost+=500
     echo "消费"$cost"元" 
     ;;
     2)
     let cost+=400
     echo "消费"$cost"元"
     ;;
     3)
     let cost+=350
     echo "消费"$cost"元" 
     ;;
     4)
     let cost+=150
     echo "消费"$cost"元" 
     ;;
     5)
     let cost+=50
     echo "消费"$cost"元"
     ;;
     *)
      echo "输入错误,请重输!"
     esac
     if [ $INT = "no" ]
     then
     break
     fi
 done
echo "您本次逛街总共花费"$cost"元" 

5、shell 计算器

#!/bin/bash
read -p "请输入第一个整数:" num1
read -p "请输入运算符:加(+);减(-);乘(x);除(/);趋于(%):" fh
read -p "请输入第二个整数:" num2
if [ $fh = "+" ]
 then
     echo "结果为:`expr $num1 + $num2`"
elif [ $fh = "-" ]
  then
     echo "结果为:`expr $num1 - $num2`"
elif [ $fh = "x" ]
  then
      echo "结果为:`expr $num1 \* $num2`"
elif [ $fh = "/" ]
  then
      echo "结果为:`expr $num1 / $num2`"
elif [ $fh = "%" ]
   then
      echo "结果为:`expr $num1 % $num2`"
else
   echo "输入有误!"
fi

6、99乘法表

方法一:

for ((a=1;a<=9;a++))
do
        for ((b=1;b<=9;b++))
        do
        if [[ a -ge b ]];then
                echo -n "$b*$a=$[a*b] "
        fi
        done
        echo " "
done

方法二:

#!/bin/bash
for ((i=1;i<=9;i++))
do
        for ((j=1;j<=i;j++))
        do
                echo -n "$j*$i=$[$i*$j] "
                if [ $i -eq $j ]
                then
                        echo -e '\n'
                fi
        done
done

方法三:

[root@gcc opt]#vim e.sh

#!/bin/bash
for ((a=1;a<=9;a++))
do
   for ((b=1;b<=$a;b++))
   do
     c=$[ $a*$b ]
     echo -ne "$a*$b=$c\t"
   done
   echo ""
done

7、正等腰三角形与倒等腰三角形

正等腰三角形

方法一:

read -p "请输入长度: " n
for i in `seq 1 $n`
do
   for ((j=$n;j>i;j--))
   do
      echo -n " "
   done

   for m in `seq 1 $i`
   do
     echo -n " * "
   done
   echo 
done

方法二:

[root@gcc opt]#vim k.sh
#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=9;b>=$a;b--))
  do
    echo -n " "
  done
  for ((c=1;c<=$a;c++))
  do
    echo -n "*"
  done
  for ((d=2;d<=$a;d++))
  do
    echo -n "*"
  done
  echo ""
done

[root@gcc opt]#sh k.sh 
         *
        ***
       *****
      *******
     *********
    ***********
   *************
  ***************
 *****************

方法三:

[root@gcc opt]#vim k.sh
#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=9;b>=$a;b--))
  do
    echo -n " "
  done
  i=$[($a*2)-1]
  for ((h=1;h<=$i;h++))
  do
    echo -n "*"
  done
  echo ""
  done

[root@gcc opt]#sh k.sh 
         *
        ***
       *****
      *******
     *********
    ***********
   *************
  ***************
 *****************

倒等腰三角形

[root@gcc opt]#vim m.sh 
#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=1;b<=$a;b++))
  do
  echo -n " "
  done
    for ((c=9;c>=$a;c--))
    do
    echo -n "*"
    done
    for ((d=8;d>=$a;d--))
    do
    echo -n "*"
    done
    echo ""
done

[root@gcc opt]#sh m.sh 
 *****************
  ***************
   *************
    ***********
     *********
      *******
       *****
        ***
         *

8、直角三角形

方法一:

!/bin/bash
#直角三角形
read -p "请输入长度:" n
for i in `seq 1 $n`
do
   for ((j=1;j<=$i;j++))
    do
      echo -n "*"
    done
echo
done

方法二:(输出正三角)

[root@gcc opt]#vim g.sh
#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=1;b<=$a;b++))
  do
    echo -n "*"
  done
  echo ""
done

[root@gcc opt]#sh i.sh 
*
**
***
****
*****
******
*******
********
*********

方法三:(输出倒三角)

[root@gcc opt]#vim j.sh
#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=9;b>=$a;b--))
  do
    echo -n "*"
  done
  echo ""
done

[root@gcc opt]#sh j.sh 
*********
********
*******
******
*****
****
***
**
*

方法四:(靠右三角形)

[root@gcc opt]#vim k.sh
#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=9;b>=$a;b--))
  do
    echo -n " "
  done
  for ((c=1;c<=$a;c++))
  do
    echo -n "*"
  done
  echo ""
done

[root@gcc opt]#sh k.sh 
         *
        **
       ***
      ****
     *****
    ******
   *******
  ********
 *********

9、批量添加用户

[root@gcc ~]#touch user.txt     #首先创建一个包含所有需要创建账号的用户名
[root@gcc ~]#vim user.txt 
wangyi             #注意一个姓名之间不要有空格
wanger
wangsan
wangsi

[root@gcc ~]#vim test2.sh      #编辑脚本
#!/bin/bash
#pi liang tianjia yonghu
a=$(cat /root/user.txt)        #定义变量a,使a遍历user.txt,注意遍历的文件要使用绝对路径
for i in $a                    #定义变量i,使i使用$a中的内容
do
   useradd $i                  #添加用户,用户名从变量i中获取
   echo "123123" | passwd --stdin $i     #给用户添加密码,密码从$i中获取
   echo "$i添加成功!"
done

(优化脚本:echo "123123" | passwd --stdin $i &> /dev/null)

或者

[root@gcc ~]#vim test5.sh
#!/bin/bash
i=1                      #用户从1开始
while [ $i -le 20 ]      #当小于等于20时一直执行while循环,直到20停止循环
do    
  useradd stu$i
  echo "123123" | passwd --stdin stu$i &> /dev/null
  echo "stu$i添加成功!"
  let i+=1            #用户每次+1进行添加
done

10、根据IP地址,批量检查主机状态

[root@gcc ~]#touch ipadds.txt
[root@gcc ~]#vim ipadds.txt 
[root@gcc ~]#vim ipadds.txt      #在文本中添加需要检查的主机的IP地址
192.168.200.1
192.168.200.2
192.168.200.3
192.168.200.4
192.168.200.5

[root@gcc ~]#vim test3.sh       #编写脚本
#!/bin/bash
a=`cat /root/ipadds.txt`        #遍历ipadds.txt文件
for i in $a                     #定义变量i从$a中取值
do
   ping -c 3 -i 0.2 -W 3 $i &> /dev/null     #开始ping检测,-c是ping的次数,-i是每次ping的时间,-w是ping的时候延时时间
   if [ $? -eq 0 ]              #判断语句,当使用$?返回0时,说明上面ping成功
   then
   echo "$i开启!"
   else
   echo "$i关闭!"
   fi
done

11、猜商品价格

[root@gcc ~]#vim test6.sh
#!/bin/bash
a=$[$RANDOM  % 1000]         
c=0                          
while [ $b -lt 1 ]     
do
let c++                      
read -p "请输入商品价格:" i
if [ $i -lt $a  ]
then
   echo "猜小了,再来一次。"
elif [ $i -gt $a ]
then
   echo "猜大了,再来一次。"
elif [ $i -eq $a ]
then
   echo "恭喜,猜对了!"
   b=2                      
fi
done
echo "你一共猜了$c次"        

12、直线

[root@gcc opt]#vim f.sh
#!/bin/bash
for ((a=1;a<=20;a++))
do
  echo -n "*"
done
echo ""

13、矩形

[root@gcc opt]#vim g.sh
#!/bin/bash
for ((i=1;i<=5;i++))
do
  for ((a=1;a<=10;a++))
  do
    echo -n "*"
  done
  echo ""
done

14、平行四边形

方法一:

[root@gcc opt]#vim d.sh
#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=9;b>=$a;b--))
  do
   echo -n " "
  done
     for ((c=1;c<=9;c++))
     do
     echo -n "*" 
     done
     echo ""
done

方法二:

#!/bin/bash
for ((i=1;i<=9;i++))
do
  for ((j=9;j>=i;j--))
  do
    echo -n " "
  done
      for ((j=2;j<=i;j++))
      do
        echo -n "*"
      done
          for ((j=1;j<=i;j++))
          do
          echo -n "*"
          done
             for ((j=9;j>=i;j--))
             do
             echo -n "*"
             done
                for ((j=9;j>=i;j--))
                do
                echo -n "*"
                done
                echo 
done

15、梯形

直角梯形:

[root@gcc opt]#vim l.sh
#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=9;b>=$a;b--))
  do
   echo -n " "
  done
     for ((c=1;c<=9+$a;c++))
     do
     echo -n "*" 
     done
     echo ""

[root@gcc opt]#sh l.sh 
         **********
        ***********
       ************
      *************
     **************
    ***************
   ****************
  *****************
 ******************

等腰三梯形:

[root@gcc opt]#vim l.sh

#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=9;b>=$a;b--))
  do
   echo -n " "
  done
     for ((c=1;c<=9+$a;c++))
     do
     echo -n "*" 
     done
     for ((d=1;d<=$a;d++))
     do
       echo -n "*"
     done
     echo ""
done

[root@gcc opt]#sh l.sh 
         ***********
        *************
       ***************
      *****************
     *******************
    *********************
   ***********************
  *************************
 ***************************

16、菱形

方法一:

#!/bin/bash
read -p "please input the longs:" long
for((i=1;i<=$long;i++))       #控制行数 
do
    for((j=$long;j>i;j--))    #控制空格输出 
    do
        echo -n " " 
    done

    let "g=2*i-1"

    for m in `seq 1 $g`       #控制*数量 
    do
        echo -n "*" 
    done

    echo "" 
done

for((i=2;i<=$long;i++))       #控制行数 
do
    for ((j=1;j<i;j++))       #控制空格输出 
    do
        echo -n " " 
    done

    let "k=2*(long-i)+1"

    for m in `seq 1 $k`       #控制*数量 
    do
        echo -n "*" 
    done

    echo "" 
done

方法二:

#!/bin/bash
for((i=9;i>=1;i--))
do
  for((a=1;a<=$i;a++))
do
  echo -n " "
  done
  for((b=9;b>=$i;b--))
do
  echo -n "*"
  done
  for((c=8;c>=$i;c--))
do
  echo -n "*"
  done
echo ""
done

for((i=2;i<=9;i++))
do
  for((a=1;a<=$i;a++))
do
  echo -n " "
  done
  for((b=9;b>=$i;b--))
do
  echo -n "*"
  done
  for((c=8;c>=$i;c--))
do
  echo -n "*"
  done
echo ""
done

17、输出环境变量PATH所包含的所有目录以及其中的所有可执行文件

[root@gcc ~]#vim demo7.sh

#!/bin/bash
IFS_OLD=$IFS
IFS=$IFS':'
for folder in $PATH
do
  echo "$folder:"
  for file in $(ls $folder)
  do
    if [ -f $folder/$file -a -x $folder/$file ]
    then
        echo " $folder/$file"
    fi
  done
done

IFS=${IFS_OLD}

18、执行脚本输入用户名,若该用户存在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户并设立其密码

#!/bin/bash
abc () {
   read -p "请输入用户名:" user
   id $user &> /dev/null
   if [ $? -eq 0 ]
    then 
	   echo ""$user"用户已存在!"
    elif [ $? -ne 0 ]
    then 
	   read -p "创建新用户"$user",请输入用户密码:" pass
	   useradd $user
	   echo "$pass" | passwd --stdin $user
   fi   
} 

abc

19、检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中

#!/bin/bash
abc () {
for i in {1..10}
do
ping -c 1 -i 0.2 -w 1 192.168.200.$i &> /dev/null
   if [ $? -eq 0 ]
   then 
       echo ""192.168.200.$i"已经开启" >> /opt/host_ip
   else
       echo ""192.168.200.$i"未开启"
   fi
done
}

abc 

20、mkdir -p /root/bin/aa/bb/cc/dd ; touch /root/bin/aa/bb/cc/dd/abc.txt,输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件

#!/bin/bash
function list_files {
    for f in `ls $1`
    do
      if [ -d "$1/$f" ]
      then
          echo "$2$f"
          list_files "$1/$f" "$2"
      elif [ ! -x "$1/$f" ]
	  then 
          echo "$2$f"
      fi
     done
}


IFS_OLD=$IFS
IFS=$IFS":"
for i in $PATH
do
  echo "$i"
  list_files "$i" " "
done
IFS=$IFS_OLD

21、菱形通过传参控制形状的可大可小

#!/bin/bash
abc () {
for((i=$1;i>=1;i--))
do
  for((a=1;a<=$i;a++))
do
  echo -n " "
  done
  for((b=$1;b>=$i;b--))
do
  echo -n "*"
  done
  for((c=$1-1;c>=$i;c--))
do
  echo -n "*"
  done
echo ""
done

for((i=2;i<=$1;i++))
do
  for((a=1;a<=$i;a++))
do
  echo -n " "
  done
  for((b=$1;b>=$i;b--))
do
  echo -n "*"
  done
  for((c=$1-1;c>=$i;c--))
do
  echo -n "*"
  done
echo ""
done

}

abc $1

猜你喜欢

转载自blog.csdn.net/Gengchenchen/article/details/111447870