模块shell脚本逻辑结构
Posted cuiyongchao007
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模块shell脚本逻辑结构相关的知识,希望对你有一定的参考价值。
七、if结构条件句知识与实践
(一)if条件句单双分支语法
1、单分支
if 条件
then
指令
fi
2、双分支
if 条件
then
指令
else
指令集2
fi
(二)if条件句多分支语句
if 条件1
then
指令1
elif 条件2
then
指令2
elif 条件3
then
指令3
else
指令4
fi
实例:
如果不存在目录/backup,则创建。
[root@centos6-kvm3 scripts]# cat 07-01.sh
#!/bin/bash
path="/backup"
[ -d $path ] || mkdir $path -p
if [ -d $path ]
then
:
else
mkdir $path -p
fi
if [ !-d $path]
then
mkdir $path -p
fi
[root@centos6-kvm3 scripts]#
开发shell脚本判断内存是否充足,如果小于100,提示不足,如果大于100提示充足。
[root@centos6-kvm3 scripts]# cat 07-02.sh
#!/bin/bash
mem=`free -m | awk 'NR==3{print $NF}'`
if [ $mem -lt 100 ]
then
echo "内存不充足!"
else
echo "内存充足!"
fi
[root@centos6-kvm3 scripts]#
判断两个整数大小:
[root@centos6-kvm3 scripts]# cat 07-03.sh
#!/bin/bash
read -p "请输入两个整数:" a b
expr $a + $b + 1 &>/dev/null
if [ $? -ne 0 ]
then
echo "请输入两个整数。"
exit 0
fi
if [ -z "$b" ]
then
echo "请输入两个整数。"
exit 1
fi
if [ $a -lt $b ]
then
echo "$a小于$b"
elif [ $a -gt $b ]
then
echo "$a大于$b"
else
echo "$a等于$b"
fi
[root@centos6-kvm3 scripts]#
如果使用传参方式:
[$# -ne 2 ]判断参数是否为两个。
打印一个安装菜单:
[root@centos6-kvm3 scripts]# cat 07-04.sh
#!/bin/bash
cat <<EOF
1.install lamp
2.install lnmp
3.exit
EOF
read -p "请输入一个数字{1|2|3}:" n
expr $n + 2 &>/dev/null
if [ $? -ne 0 ]
then
echo "usage:$0{1|2|3}"
exit 0
fi
if [ $n -eq 1 ]
then
echo "install lamp"
elif [ $n -eq 2 ]
then
echo "install lnmp"
elif [ $n -eq 3 ]
then
echo "exit"
else
echo "usage:$0{1|2|3}"
fi
[root@centos6-kvm3 scripts]#
八、函数知识与实践
(一)shell函数语法
第一种语法 第二种语法 第三种语法
function 函数名(){ } function 函数名 {} 函数名() { }
实例
[root@centos6-kvm3 scripts]# cat 08-01.sh
#!/bin/bash
function oldboy(){
echo "i am $1 teacher"
}
function oldgirl {
echo "i am $1 teacher"
}
test() {
echo "this is $1"
}
oldboy $1
oldgirl $2
test $3
[root@centos6-kvm3 scripts]# bash 08-01.sh oldboy oldgirl test
i am oldboy teacher
i am oldgirl teacher
this is test
[root@centos6-kvm3 scripts]#
实例:检测web网站是否正常
wget 命令:
--spider 模拟爬虫
-q 安静访问
-o /dev/null 不输出
-T --timeout 超时时间
-t --tries 重试次数
wget --spider -T 5 -q -o /dev/null -t 2 www.baidu.com
echo $?
curl命令:
-I 查看响应头
-s 安静的
-o /dev/null 不输出
-w%{http_code} 返回状态码
[root@centos6-kvm3 scripts]# curl -I -s -o /dev/null -w "%{http_code}
" www.baidu.com
200
[root@centos6-kvm3 scripts]#
案例:
[root@centos6-kvm3 scripts]# cat 08-02.sh
#!/bin/bash
function usage(){
echo "usage:$0 url"
exit 1
}
function url_check {
wget -q -o /dev/null -T 5 -t 3 $1
if [ $? -eq 0 ]
then
echo "$1 is ok!"
else
echo "$1 is fail!"
fi
}
main(){
if [ $# -ne 1 ]
then
usage
else
url_check $1
fi
}
main $*
[root@centos6-kvm3 scripts]#
九、case结构条件句应用时间
(一)case语法结构
case结构条件句相当于多分支if条件语句,但是它比这些条件句看起来更规范工整,常被用于实现系统服务脚本等应用场景中。
case语句的语法结构:
case "变量" in
值1)
指令1
;;
值2)
指令2
;;
值3)
指令3
;;
*)
指令4
esac
(二)实例1:
[root@centos6-kvm3 scripts]# cat 09-03.sh
#!/bin/bash
cat <<EOF
1.install lnmp
2.install lamp
3.exit
EOF
read -p "请输入一个数字{1|2|3}:" num
expr $num + 2 &>/dev/null
if [ $? -ne 0 ]
then
echo "usage:$0{1|2|3}"
exit 1
fi
case $num in
1)
echo "install lnmp"
;;
2)
echo "install lamp"
;;
3)
echo "exit"
exit
;;
*)
echo "usage:$0{1|2|3}"
exit 1
esac
[root@centos6-kvm3 scripts]#
(三)实例2:
当用户输入对应的数字选择水果的时候,告诉他选择的水果是什么,并给水果单词加上一种颜色(随意),要求用case语句实现。
内容的颜色用数字表示,范围为30-37,每个数字代表一种颜色。
echo -e "