shell case语句及函数

case 菜单选择打印
语法:
case var in     var变量
    patten 1)   匹配模式1 a|b|c  |和or类似
    command...  需要执行的命令
    ;;      命令执行完毕
    patten 2)
    command...
    ;;
    *)      默认值,没有匹配的模式
    command...  
    ;;
esac            代表case语句的结束

demo1:当给程序输入start|s时,显示service is running!;stop——>service is stoped;...
#!/bin/bash
#read -p "请输入参数:" var
case $1 in
    start|s)
    echo service is running
    ;;
    stop)
    echo service is stoped
    ;;
    reload)
    echo service is reload
    ;;
    *)
    echo xxxxx
    ;;
esac

demo2:相互嵌套
#!/bin/bash
read -p "小明,你喜欢我吗?(喜欢|不喜欢|爱你):" love
case $love in
    喜欢)
    echo "我也喜欢你"
    ;;
    不喜欢)
    read -p "那你喜欢谁?" who
    case $who in
        小红)
        echo "她是我的闺蜜"
        ;;
        小彭)
        echo "额..拜拜"
        ;;
        *)
        echo "我们不合适"
        ;;
    esac
    ;;
    *)
    echo "你到底什么意思?"
    ;;
esac

demo3:维护菜单选择
#!/bin/bash
echo "*********welcome to uplooking*********"
echo "*********选择操作类型*******************"
echo "**********1——系统**********************"
echo "**********2——程序**********************"
echo "**********3——数据库********************"
echo "**********0——退出**********************"
read -p "请选择操作类型:" choose
case $choose in
    1)
    echo "你选择的类型是系统维护"
    ;;
    2)
    echo "你选择的是程序"
    ;;
    3)
    echo "*********welcome to uplooking*********"
    echo "*********选择操作类型*******************"
    echo "**********1——备份**********************"
    echo "**********2——数据导入导出****************"
    echo "**********0——退出**********************"
    read -p "请你输入对数据库的操作:" choose1
    case $choose1 in
        0)
        echo "退出"
        ;;
        1)
        echo "备份数据库"
        ;;
        2)
        echo "导入导出"
        ;;
        *)
        echo "你要干啥?"
        ;;
    esac
    ;;
    0)
    exit
    ;;
esac

课堂练习:
1、输入一个等级(A—E),查看每个等级的成绩;如输入A,则显示"90分~100分";依次类推

2、模拟一个2人相亲的场景,交互式输入名字、性别、年龄(年龄放在性别判断后)
1>对性别进行判断,如果不输入男或者女,则显示“你是泰国来的码?”如果是男的则对年龄判断:
2>男的年龄大于18岁则显示“某某先生,你结婚了码?”;如果对方回答yes或者结了,则显示“那你来着凑什么热闹?”;如果对方回答no或者没结,则再次询问“那你有房有车吗?”;如果既不说结了也不说没结,则显示“你到底有没有结婚??”
3>问有房有车吗,对方回答有,则显示“咱们去民政局领证吧,正好今天是七夕!”;如果对放回答没有,则显示“不好意思,我去下洗手间...”;如果即不回答有也不回答没有,则显示“请正面回答我的问题??”
4>男的年龄如果小于18岁,则显示“你个小猫孩来着干啥,不好好读书”
5>如果是女的,并且年龄大于18岁,则显示“某某女士,您好”;否则显示“某某小姐,您好”


函数:
语法结构:
方法1:
function function_name(){
    command...
}
方法2function_name(){
command...
}

return:作用
1、用来返回一个值给函数,主函数可以调用该返回值 0256  return 2
2、用来结束函数

demo1:
#!/bin/bash
function hello(){
    echo hello
    echo $1
}

world(){
    echo hi
    echo $1
}

函数调用:
1、直接在终端调用
# source fun1.sh 
[root@node1 shell03]# hello uplooking
hello
uplooking
[root@node1 shell03]# world 888
hi
888
2、写到全局的环境变量文件里
vim /etc/profile
...
function hello(){
    echo hello
    echo $1
}

world(){
    echo hi
    echo $1
}

3、脚本里调用
#!/bin/bash
function hello(){
    echo hello
    echo $1
}
#read -p "请输入参数:" var
case $1 in
    start|s)
    hello uplooking
    echo service is running
    ;;
    stop)
    hello 66666;
    echo service is stoped
    ;;
    reload)
    echo service is reload
    ;;
    *)
    hello 7777;echo xxxxx
    ;;
esac

demo:批量创建3个用户user1~user3;用户的附加组为admin组;密码为123
#!/bin/bash
g=admin
groups(){
groupadd $g
}

users(){
    for i in {1..3}
    do
    useradd -G $g user$i
    echo 123|passwd --stdin user$i
    done
}

grep -w admin /etc/group &>/dev/null
if [ $? -ne 0 ];then
 groups
 users
else
 users
fi





作业:
写脚本自动搭建web服务,要求如下:
1、基于域名的虚拟主机(DNS可以用脚本也可以写到hosts文件中即可)
2、访问www.myweb.com——>this is myweb test page
3、web服务器的ip和主机名交互式的从外部输入,并且如果不输入一致提示输入
提示:
在脚本中可以先写一个函数,目的是如果不输入相应的内容则一致提示输入
4、搭建完后要显示测试是否成功
5、根据自己的想法可以是该脚本更丰富

预习:sed





你可能感兴趣的:(服务器)