脚本语句介绍和练习题一

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了脚本语句介绍和练习题一相关的知识,希望对你有一定的参考价值。

一、if、case语句篇

PS:脚本现在是本人的弱项,此篇主要写一下做过的一点脚本题,都是一些基础难度不是很大的题,现在写出来也算是回顾一下吧,以后有更实用更专业的脚本可能会继续更新。



1.条件选择if语句

选择执行: 
 注意:if语句可嵌套 

单分支
         if 判断条件;then 
         条件为真的分支代码
 fi 

 双分支 
         if 判断条件; then 
             条件为真的分支代码 
 else 
             条件为假的分支代码 
 fi

 多分支 
 if 判断条件1; then 
     条件为真的分支代码 
elif 判断条件2; then 
     条件为真的分支代码 
elif 判断条件3; then 
     条件为真的分支代码 
else 
     以上条件都为假的分支代码 
fi 
     逐条件进行判断,第一次遇为“真”条件时,执行其分支, 而后结束整个if语句



2.if示例

这个例子是用脚本计算从1开始相加到一个正整数的和

[[email protected] ~/bin]#cat ./jisuan.sh 
#!/bin/bash
#Filename:jisuan.sh
#date 2018-03-17
#Author:宛若天堂
#--------------------------
read -p " 请输入正整数的值: " ab
if [[ "$ab" =~ ^[0-9]+$ ]];then
jieguo=` seq -s+ 1 $ab |bc `
    echo "从1开始计算到您输入的值的和为:$jieguo"
        else
            echo "请输入正确的数字"
fi
[[email protected] ~/bin]#./jisuan.sh 
 请输入正整数的值: 100
从1开始计算到您输入的值的和为:5050
[[email protected] ~/bin]#seq -s+ 1 100 |bc
5050

if语句后面的“ $ab =~ ^[0-9]+$ ” 是用来判断输入的内容是否为正整数。

再来一个比大小的脚本,$# -ne 2 意思是说给脚本的参数不是两个就立刻退出。
技术分享图片
测试结果

技术分享图片

PS:这个脚本有一点BUG,就是还未判断其它字符比如输入aa bb 应该也有个退出状态(待断剑重铸之日,骑士归来之时


3、条件判断case语句

case 变量引用 in  case支持glob风格的通配符
case var in     var变量
    patten 1)   匹配模式1 a|b|c  |或的意思
    command...  需要执行的命令
    ;;      命令执行完毕
    patten 2)
    command...
    ;;
    *)      默认值,没有匹配的模式
    command...  
    ;;
esac            代表case语句的结束



4、case例题

[[email protected] /app/lianxi]#cat yuema.sh 
#!/bin/bash
read -p "今晚约吗:" yu
case $yu in
[Yy][eE][sS])
    echo "那好吧"
    ;;
[Nn][oO])
    echo "伤心了"
    ;;
*)
    echo "请你圆润的离开我的视线"  
esac

这里解释一下,回答"yes"和“no”时会有多种大小写的可能出现,这样写无论大小写的回答都能匹配到关键字,而最后的*)是指没匹配到的就回答echo后面的语句啦

二、for循环语句

1、for循环

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

列表生成方式: 
(1) 直接给出列表
(2) 整数列表:
        (a) {start..end} 
        (b) $(seq [start [step]] end)
(3) 返回列表的命令 
        $(COMMAND) 
(4) 使用glob,如:*.sh 
(变量引用);
        [email protected], $*

先来个很简单的例子,也是大家见到最多的一种
技术分享图片

从1开始每次相加1,直到循环到10为止。

再来一个ping网段的脚本,先查看一下IP地址
技术分享图片
可以看到(虚拟级)仅主机的IP是192.168.80网段的,为省时间脚本里我只写了和仅主机范围左右的了

[[email protected] /app/lianxi]#cat wangduan.sh 
#!/bin/bash
#需要ping别的网段就改net后面的变量就行了
net=192.168.80
up=0
down=0
for i in {120..130}
do
    if  ping -c1 -w1 $net.$i &> /dev/null ;then
    echo $net.$i UP ; 
        let up++ ;
else
    echo $net.$i down; 
        let down++ ;
fi

done 
echo "up的一共有$up"
echo "down的一共有$down"
unset net

#{ } 不开子进程 小括号( ) 会开子进程
ps:let ++ up 是指每次$i循环以后的结果(Up)每次加1,down同理

技术分享图片

三、总结

此篇中的几个例题难度都不是很大,而且还有while循环 、until循环循环、控制语句continue、循环控制语句break、循环控制shift命令等等还未提及,此篇有基础的就不用看了,我这个渣渣菜鸟尚未搞定它们,待我后续更新!

以上是关于脚本语句介绍和练习题一的主要内容,如果未能解决你的问题,请参考以下文章

译丨Yarn - Javascript 新一代套件管理

动态SQL基础概念复习(Javaweb作业5)

shell脚本练习

Shellshell 的执行流控制

shell脚本——ifcase语句练习

for 语句小习题