用shell编程求C语言1到100,shell脚本快速入门之-----shell脚本练习100例!!!

文章目录

1、循环ping192.168.110网段的所有主机

2、for批量创建用户

3、创建存放1-100奇数的数组里

创建任意数字及长度的数组,根据客户的需求加入元素

4、将一个数组中的所有不够60的提到60

5、判断数组中最大的数

6、 猜数字游戏

7 检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员(使用字串对比版本)

8编写脚本,实现人机游戏

9、99乘法表

10、 100以内的数字求合

11、自动调整网络配置

12、将脚本设置为开机自启动

13、成绩

14、输入你想加入的数组元素

15、小于60的数组直接unset干掉

16、倒直角三角

17、 正直角

18、平行四边形

19、梯形

20、等腰三角形

21、菱形

22、三个人抽奖随机比大小

23、 阶乘

24、使用函数 判断是否有三个数相乘;如果有,直接乘然后输出,没有的话就退出

25、用until 小于50的求合

26、冒泡排序法 将数组的序列进行排序

27、请输入你的成绩 小于60 不及格 85以上优秀

28、为指定用户发送在线消息

1、循环ping192.168.110网段的所有主机

#!/bin/bash

i=1

for i in {1..254}

do

ping -c 2 -w 3 -i 0.3 192.168.110.$i $> /dev/null

if [ $? -eq 0 ] ;then

echo "192.168.110.$i is yes"

else

echo "192.168.110.$i is no"

fi

let i++

done

2、for批量创建用户

user=$`cat /opt/user.txt`

for i in $user

do

useradd $i

echo "1234" | passwd --stdin $i

done

~

3、创建存放1-100奇数的数组里

#!/bin/bash

for ((i=0;i<=100;i++))

do

if [ $[$i%2] -eq 1 ] ;then

arr[$[$[$i-1]/2]]=$i

fi

done

echo ${arr[*]}

创建任意数字及长度的数组,根据客户的需求加入元素

#!/bin/bash

#创建任意数字及长度的数组,根据客户的需求加入元素

i=0 #数组的下标

while true

do

read -p "是否输入元素(yes/no):" doing

if [$doing == no]

then

break

fi

read -p "请存入第$[$i+1]个元素:" key

shuzu[$i]=$key

let i++

done

echo ${shuzu[*]}

4、将一个数组中的所有不够60的提到60

#!/bin/bash

num=(90 90 90 90 90 90 90 90 20 20)

for ((i=0;i<=9;i++))

do

if [$[num[$i]] -lt 60 ]

then

num[$i]=60

fi

done

echo ${num[*]}

5、判断数组中最大的数

#!/bin/bash

score=(72 63 90 45 75)

temp=0

for ((i=0;i

do

if [${score[$i]} -gt $temp ];then

temp=${score[$i]}

fi

done

echo $temp

6、 猜数字游戏

while :

do

read -p "计算机生成了一个 1‐100 的随机数,你猜: " cai

if [$cai -eq $num]

then

echo "恭喜,猜对了"

exit

elif [$cai -gt $num]

then

echo "Oops,猜大了"

else

echo "Oops,猜小了"

fi

done

7 检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员(使用字串对比版本)

if [ $USER == "root" ]

then

yum ‐y install vsftpd

else

echo "您不是管理员,没有权限安装软件"

fi

#!/bin/bash

8编写脚本,实现人机游戏

game=(石头 剪刀 布)

num=$[RANDOM%3]

computer=${game[$num]}

# 通过随机数获取计算机的出拳

#出拳的可能性保存在一个数组中,game[0],game[1],game[2]分别是 3 中不同的可能

echo "请根据下列提示选择您的出拳手势"

echo "1.石头"

echo "2.剪刀"

echo "3.布"

read -p "请选择 1‐3:" person

case $person in

1)

if [ $num -eq 0 ]

then

echo "平局"

elif [ $num -eq 1 ]

then

echo "你赢"

else

echo "计算机赢"

fi;;

2)

if [ $num -eq 0 ]

then

echo "计算机赢"

elif [ $num -eq 1 ]

then

echo "平局"

else

echo "你赢"

fi;;

3)

if [ $num -eq 0 ]

then

echo "你赢"

elif [ $num -eq 1 ]

then

echo "计算机赢"

else

echo "平局"

fi;;

*)

echo "必须输入 1‐3 的数字"

esac

9、99乘法表

#!/bin/bash

# 9*9 乘法表(编写 shell 脚本,打印 9*9 乘法表)

for i in `seq 9`

do

for j in `seq $i`

do

echo -n "$j*$i=$[i*j] "

done

echo

done

#!/bin/bash

10、 100以内的数字求合

# 对 100 以内的所有正整数相加求和(1+2+3+4...+100)

#seq 100 可以快速自动生成 100 个整数

sum=0

for i in `seq 100`

do

sum=$[sum+i]

done

echo "总和是:$sum"

11、自动调整网络配置

#!/bin/bash

#chkconfig: 35 80 90

#开机启动ip地址调整

ip=www.baidu.com

ping -c 2 $ip &>/dev/null

if [ $? -eq 0 ]

then

echo "百度没问题"

else

echo "请主人稍等,我正在更改你的网卡"

sed -ri '/^IPADDR=/cIPADDR=192.168.110.132' /etc/sysconfig/network-scripts/ifcfg-ens33

sed -ri '/^GATEWAY=/cGATEWAY=192.168.110.2' /etc/sysconfig/network-scripts/ifcfg-ens33

sed -ri '/^DNS1=/cDNS1=8.8.8.8' /etc/sysconfig/network-scripts/ifcfg-ens33

echo "网卡配置文件已改完 正在重启网络服务"

systemctl restart network

fi

ping -c 2 $ip &>/dev/null

if [ $? -eq 0 ] ;then

echo "主人,一切准备就绪"

else

echo "请检查你绑定的网卡是不是vm8"

fi

12、将脚本设置为开机自启动

1. 编写脚本luzy.sh,脚本内容如下:

#!/bin/sh

#chkconfig: 35 80 90

#description:开机自动启动的脚本程序

echo "设置开机自启"

echo "启动完毕"

1

2

3

4

5

6

7

脚本第一行 “#!/bin/sh” 告诉系统使用的shell;

脚本第二行 “#chkconfig: 35 80 90” 表示在3/5运行级别启动,启动序号(S80),关闭序号(K90);

脚本第三行 表示的是服务的描述信息

注意: 第二行和第三行必写,负责会出现如“服务 luzy.sh 不支持 chkconfig”这样的错误。

2. 将写好的luzy.sh脚本移动到/etc/init.d/目录下

3. 给脚本赋可执行权限

cd /etc/init.d/

chmod +x luzy.sh

1

2

4. 添加脚本到开机自动启动项目中

chkconfig --add luzy.sh

chkconfig luzy.sh on

1

2

到这里就设置完成了,我们只需要重启一下我们的服务器,就会执行脚本

13、成绩

case $score in

8[5-9]9[0-9]|100)

echo "成绩优秀"

;;

7[0-9]8[0-4])

echo "成绩良"

;;

6[0-9])

echo "成绩合格"

;;

$[是运算]

14、输入你想加入的数组元素

#!/bin/bash

arr(){

read -p "请输入你想要加入的元素:" n

echo $n >> /opt/text1.txt

list=`cat /opt/text1.txt`

num=($list)

echo "数组中的元素:${num[*]}"

}

while :

do

read -p "请问您想要加入元素吗?[Y/N]: " add

if [ "$add" == "Y" ]

then

arr

elif [ "$add" == "N" ]

then

echo "数组中所有的元素为:${num[*]},再见!"

break

fi

done

15、小于60的数组直接unset干掉

#!/bin/bash

num=(89 76 54 34 23)

i=0

for p in ${num[*]}

do

if [ $p -lt 60 ];then

unset num[$i]

fi

let i++

done

echo ${num[*]}

~

16、倒直角三角

#!/bin/bash

read -p "输入数" p

for ((i=1;i<=$p;i++))

do

for ((o=$i;o

do

echo -n "*"

done

echo ""

done

#!/bin/bash

read -p "输入数" p

for ((i=$p;i>0;i--))

do

for ((o=$i;o>0;o--))

do

echo -n "*"

done

echo ""

done

17、 正直角

#!/bin/bash

read -p "输入数" p

for ((i=1;i<=$p;i++))

do

for ((o=$i;o>0;o--))

do

echo -n "*"

done

echo ""

done

18、平行四边形

read -p "输入数" p

for ((i=1;i<=$p;i++))

do

for ((o=$i;o>0;o--))

do

echo -n " "

done

for ((j=1;j<=$p;j++))

do

echo -n "*"

done

echo ""

done

19、梯形

#!/bin/bash

read -p "输入数" p

for ((i=1;i<=$p;i++))

do

for ((o=$i;o

do

echo -n " "

done

for ((j=$i+1;j>=0;j--))

do

echo -n "* "

done

echo ""

done

20、等腰三角形

#!/bin/bash

read -p "输入数" p

for ((i=1;i<=$p;i++))

do

for ((o=$i;o

do

echo -n " "

done

for ((j=$i-1;j>=0;j--))

do

echo -n "* "

done

echo ""

done

21、菱形

read -p "输入数" p

for ((i=1;i<=$p;i++))

do

for ((o=$i;o

do

echo -n " "

done

for ((j=$i-1;j>=0;j--))

do

echo -n "* "

done

echo ""

done

for ((i=1;i<=$p-1;i++))

do

for ((o=$i;o>0;o--))

do

echo -n " "

done

for ((j=$i;j<=$p-1;j++))

do

echo -n "* "

done

echo ""

done

22、三个人抽奖随机比大小

#!/bin/bash

s0=`cat /opt/name.txt | grep "shangzhen"`

s1=`cat /opt/name.txt | grep "shengjie" `

s2=`cat /opt/name.txt | grep "shanannan"`

a=0

b=0

c=0

for ((i=1;i<=10;i++))

do

suiji=$[$RANDOM%3]

if [ $suiji -eq 0 ];then

a=$[$a+1]

echo "$s0的票数为$a"

elif [ $suiji -eq 1 ];then

b=$[$b+1]

echo "$s1的票数为$b"

elif [ $suiji -eq 2 ];then

c=$[$c+1]

echo "$s2的票数为$c"

fi

done

echo $a $b $c

23、 阶乘

#!/bin/bash

read -p "请输入你想要的阶乘" p

jiecheng=1

for ((i=1;i<=$p;i++))

do

jiecheng=$[jiecheng*i]

done

echo $jiecheng

24、使用函数 判断是否有三个数相乘;如果有,直接乘然后输出,没有的话就退出

if [ $# -ne 3 ] ; then

echo "`basename $0` par1 par2 par3 "

exit

fi

fun3() {

echo $(($1 * $2 * $3))

}

fun3 $1 $2 $3

25、用until 小于50的求合

i=1

sum=0

until [ $i -gt 50 ]

do

let sum+=$i

let i++

done

echo $sum

26、冒泡排序法 将数组的序列进行排序

1、可以采用冒泡排序的方式。

2、双层循环,外层控制把数组中每一个元素都取出来,内层循环采用当前元素和向后的数组元素比大小,最小的值和当前元素交换的方式

3、输入成绩这一块,因为数组已经有序了,只要拿输入元素和数组中元素相比,如果数组中元素大于当前输入元素,记住当前位置,当前位置数组后面的元素都向后移一位。

#!/bin/bash

arr=(53 100 86 92 86 55 65 76 56 59)

#冒泡排序

for ((i=0;i

do

for ((j=i+1;j

do

if [[${arr[i]} -gt ${arr[j]} ]] ; then

max=${arr[i]}

arr[i]=${arr[j]}

arr[j]=$max

fi

done

done

echo ${arr[*]}

read -p "请输入成绩:" sum

for ((i=0;i

do

if [[${arr[i]} -gt $sum ]] ; then

tmp=$i

break

fi

done

for ((j=${#arr[*]};j>i;j--))

do

arr[j]=${arr[j-1]}

done

arr[i]=$sum

echo ${arr[*]}

27、请输入你的成绩 小于60 不及格 85以上优秀

#!/bin/bash

while :

do

read -p "请输入你的成绩" p

if [[ $p -lt 100 && $p -gt 85 ]];then

echo "你的成绩为优秀"

break

elif [[ $p -lt 85 && $p -ge 60 ]] ;then

echo "你的成绩为一般"

break

elif [ $p -lt 60 ];then

echo "你的成绩没及格"

break

else

echo "你的输入有误,请输入正确的成绩"

fi

done

#!/bin/bash

read -p "你的成绩是" score

case $score in

8[5-9]|9[0-9]|100)

echo "成绩优秀"

;;

7[0-9]|8[0-4])

echo "成绩良"

;;

6[0-9])

echo "成绩合格"

;;

[0-5][0-9])

echo "没及格"

;;

*)

echo "滚犊子"

esac

28、为指定用户发送在线消息

若指定用户不在线(未登陆系统),则每10分钟(实验中为了测试效果,可改为3s)试一次,直至用户登录系统后再发送信息

用户名与消息通过为止参数传递给脚本

#!/bin/bash

username=$1

#判断格式参数是否为空

if [ $# -lt 1 ]

then

echo "Usage:`basename $0` []"

exit 1

fi

#判断账号是否存在

if grep "^$username:" /etc/passwd &> /dev/nell;then :

else

echo "用户不存在"

exit 2

fi

#判断用户是否在线

until who | grep "$username" &> /dev/null

do

echo "用户不在线,正在尝试连接"

sleep 3

done

mes=$*

echo "$mes" | write "$username"

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值