Shell复习—第二天

练习

以脚本传参和read读入的方式输入两个文件路径,任意个一个文件不存在,则提示用户第几个文件不存在,并退出脚本
[root@node3 shell]# vim 14.sh
#!/bin/bash

read -p "请输入两个文件的路径:" a b

[ -f "$a" ] && echo "$a" || {
        echo "第一个文件${a}不存在"
}

[ -f "$b" ] && echo "$b" || {
        echo "第二个文件${b}不存在"
        exit
}
[root@node3 shell]# sh 14.sh 
请输入两个文件的路径:1.sh 2.sh
第一个文件1.sh不存在
第二个文件2.sh不存在
[root@node3 shell]# sh 14.sh 
请输入两个文件的路径:14.sh 2.sh
14.sh
第二个文件2.sh不存在
使用脚本传参的方式实现整数的加、减、乘、除、取余、幂运算,对传入的参数或者read读入的变量内容进行判断,如果不符合计算条件,提示用户,并退出,不要用if判断
判断标准:
1、传入的参数必须为两个
2、传入的两个参数必须是证书
3、在除法中,除数不能为0

第一种方法
[root@node3 shell]# vim 15.sh 
echo "$1/$2"`echo $[$1/$2]`
#!/bin/bash


[ "$#" -ne 2 ] && {
        echo "参数必须为2 Usage <$0 arg1 arg2>"
        exit 1
}

expr $1 + $2 + 1 &> /dev/null

[ "$?" != 0 ] && {
        echo "参数必须为整数"
        exit 2
}


echo "$1+$2="`echo $[$1+$2]`
echo "$1-$2="`echo $[$1-$2]`
echo "$1*$2="`echo $[$1*$2]`
echo "$1**$2="`echo $[$1**$2]`

[ "$2" -eq 0 ] && {
        echo "除数不能为0!"
        exit 3
}
echo "$1/$2="`echo $[$1/$2]`
echo "$1%$2="`echo $[$1%$2]`

[root@node3 shell]# sh 15.sh 6 3
6+3=9
6-3=3
6*3=18
6**3=216
6/3=2
6%3=0
[root@node3 shell]# sh 15.sh 1
参数必须为2 Usage <15.sh arg1 arg2>
[root@node3 shell]# sh 15.sh 5 0
5+0=5
5-0=5
5*0=0
5**0=1
除数不能为0!
[root@node3 shell]# sh 15.sh 2 2.5
参数必须为整数

第二种方法
[root@node3 shell]# cat 16.sh 
#!/bin/bash

read -p "请输入需要计算的内容" x y

expr $x + $y + 1 &> /dev/null

[ "$?" -ne 0 ] && {
        echo "参数必须为整数"
        exit 1
}

echo "$x+$y=" $(($x+$y))
echo "$x-$y=" $(($x-$y))
echo "$x*$y=" $(($x*$y))
echo "$x**$y="$(($x**$y))

[ "$y" -eq 0 ] && {
        echo "除数不能为0!"
        exit 2
}
[root@node3 shell]# sh 16.sh 
请输入需要计算的内容5 6 7
参数必须为整数
[root@node3 shell]# sh 16.sh 
请输入需要计算的内容5 2.3
参数必须为整数
[root@node3 shell]# sh 16.sh 
请输入需要计算的内容5 0
5+0= 5
5-0= 5
5*0= 0
5**0=1
除数不能为0!
[root@node3 shell]# sh 16.sh 
请输入需要计算的内容6 3
6+3= 9
6-3= 3
6*3= 18
6**3=216
6/3= 2
6%3= 0
查看当前磁盘当前状态,如果使用率超过10%,则触发报警发邮件
[root@node3 shell]# vim disk.sh
        echo "服务器磁盘使用率超过$use"
#!/bin/bash

use=`df -h | awk 'NR==7{print $5}'`

userNum=${use/\%/}

[ "$userNum" -gt 10 ] && {
        echo "服务器磁盘使用率超过$use"
        echo "服务器磁盘使用率超过$use" | mail -s "磁盘不足" admin@giaogg.cn
}
[root@node3 shell]# sh disk.sh 
服务器磁盘使用率超过14%
输入或者通过命令传入一个字符或数字,如果传入的数字等于1就打印1,如果等于2,就打印2;
如果不等于1也不等于2,就提示输入不对,然后退出程序(两种比较方式任选其一:数字比较或字符串比较

[root@node3 shell]# vim num.sh 
#!/bin/bash


[ "$1" -eq 1 ] && {
        echo "$1"
        exit 1
} ||
[ "$1" -eq 2 ] && {
        echo "$1"
        exit 2
} ||
{
        echo "输出错误"
        exit 3
}
[root@node3 shell]# sh num.sh 1
1
[root@node3 shell]# sh num.sh 2
2
[root@node3 shell]# sh num.sh 3
输出错误
开发shell脚本,分别以脚本传参方式和read读入方式比较两个整数大小,用条件表达式(禁用if)进行判断并以屏幕输出的方式提醒用户比较
结果。(一共需要开发两个脚本,在传参和read读入方式实现时,需要对变量是否为数字及传参个数是否整数给予提示)

第一种read读入方式
[root@node3 shell]# cat num1.sh 
#!/bin/bash

read -p "请输入两个整数:" a b


expr $a + $b + 0 &> /dev/null

[ "$?" -ne 0 ] && {
        echo "参数必须为整数"
        exit 2
} || {
[ "$b" = '' -o "$b" = '' ] && {
        echo "必须是两个参数"
        exit 1
}
}|| echo "参数正确"

[ "$a" -gt "$b" ] && {
        echo "$a > $b"
} ||{
[ "$a" -lt "$b" ] && {
        echo "$a < $b"
}
}|| echo "$a = $b"
[root@node3 shell]# sh num1.sh  
请输入两个整数:2 1
参数正确
2 > 1
[root@node3 shell]# sh num1.sh 
请输入两个整数:1 2 
参数正确
1 < 2
[root@node3 shell]# sh num1.sh 
请输入两个整数:1
必须是两个参数
[root@node3 shell]# sh num1.sh 
请输入两个整数:1 2.3
参数必须为整数

第二种传参方式
[root@node3 shell]# cat num2.sh 
#!/bin/bash

[ "$#" -ne 2 ] && {
        echo "参数必须是两个"
        exit 1
} || {
expr $1 + $2 + 0 &> /dev/null
[ "$?" -ne 0 ] && {
        echo "参数必须为整数"
        exit 2
}
}

[ "$1" -gt "$2" ] && {
        echo "$1 > $2"
} || {
[ "$1" -lt "$2" ] && {
        echo "$1 < $2"
}
} || echo "$1 = $2"
[root@node3 shell]# sh num2.sh 
参数必须是两个
[root@node3 shell]# sh num2.sh 1 2
1 < 2
[root@node3 shell]# sh num2.sh 2 1
2 > 1
[root@node3 shell]# sh num2.sh 1 3.2
参数必须为整数
打印菜单,按照选择项选择喜欢的美女(禁用case语句)
要求:
	1)当用户输入1时,输出"I guess you like heijiajia",然后退出脚本
	2)当用户输入非1-3的字符时,输出"I guess you are not man",然后退出脚本

[root@node3 shell]# cat menu.sh 
#!/bin/bash

mes="I guess you like"

cat <<EOF
        1.heijiajia
        2.高圆圆
        3.蔡徐坤
EOF

read -p "Please input the num you like:" num

[ "$num" -eq 1 ] && {
        echo "$mes heiijiajia"
} || {
[ "$num" -eq 2 ] && {
        echo "$mes 高圆圆"
}
} || {
[ "$num" -eq 3 ] && {
        echo "打篮球那个 Are you OK?"
}
} || echo "I guess you are not man"
[root@node3 shell]# sh menu.sh 
        1.heijiajia
        2.高圆圆
        3.蔡徐坤
Please input the num you like:1
I guess you like heiijiajia
[root@node3 shell]# sh menu.sh 
        1.heijiajia
        2.高圆圆
        3.蔡徐坤
Please input the num you like:2
I guess you like 高圆圆
[root@node3 shell]# sh menu.sh 
        1.heijiajia
        2.高圆圆
        3.蔡徐坤
Please input the num you like:3
打篮球那个 Are you OK?
[root@node3 shell]# sh menu.sh 
        1.heijiajia
        2.高圆圆
        3.蔡徐坤
Please input the num you like:4
I guess you are not man
处理以下内容,将域名提取并进行计数排序,
处理以下文件内容,将域名提取并进行计数排序,如处理:
http://www.baidu.com/index.html
http://www.baidu.com/1.html
http://post.baidu.com/index.html
http://mp3.baidu.com/index.html
http://www.baidu.com/3.html
http://post.baidu.com/2.html
得到如下结果:
域名的出现次数  域名
3   www.baidu.com
2   post.baidu.com
1   mp3.baidu.com

[root@node3 shell]# cat url.txt | awk -F '[/]' '{print $3}' | sort | uniq -c | sort -nr | sed '1i域名的出现次数  域名' 
域名的出现次数  域名
      3 www.baidu.com
      2 post.baidu.com
      1 mp3.baidu.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想敲代码的运维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值