练习
以脚本传参和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