Linux基础——Shell(二)

shell脚本case菜单&函数

作用

使用case语句改写if多分支可以使脚本结构更加清晰、层次分明。针对变量的不同取值,执行不同的命令序列。

特点

case没有优先级,输入那个就调用哪个

结构

case   变量值  in

模式1

       命令序列1

;;

模式2

       命令序列2

;;

*

       默认命令序列

esac

示例

 

小实验

设置一个脚本文件,将其添加到chkconfig中,使用chkconfig命令可以看到它在服务列表中。

编写一个脚本

PS

# chkconfig35  81  31

此处的#并非注释,而是让chkconfig可以识别后面的内容。

35为启动模式,3模式和5模式;“-”表示所有启动级别都不默认开启。

81为此程序是第81个开启的程序

31为此程序是第31个关闭的程序

[root@centos mulu]# chmod +x /etc/init.d/qidong.sh

为文件添加执行权限,让其可以使用路径执行

[root@centos mulu]# chkconfig --add /etc/init.d/qidong.sh

qidong.sh添加到启动服务中,就可以使用chkcofig查看服务

优化脚本

 

. /etc/init.d/functions为调用functions库。(下面的为软链接)

action 也是输出的意思,类似于echo,但功能略有不同

/bin/true显示效果为OK/bin/false显示效果为FAILED

我的shell为中文的,所以显示的是失败和确定。

函数

作用

将命令格式写在一起,可方便重复使用命令序列

格式

[ function ] 函数名(){

命令序列

[ return x ]

}

调用函数

函数名  [ 参数1 ]  [ 参数2 ]

return:跳出整个函数体

continue:临时终止本次循环

break:直接终止整个循环(终止离他最近的循环,外部循环与他无关)

exit:直接终止整个脚本

例子

函数名不需要加$,封装的过程为函数,每引用一次函数的名字,就会执行一遍过程。

例子

 

将函数先进行定义好,然后用循环包含菜单,每执行一条匹配的内容,就会走一遍流程,直到退出。

解析

clear清屏,然后调用Title函数,中的内容,用户输入的内容赋值给ChooseChoose值为1的话,会去调用Login函数中的匹配项;Choose值为2的话,会调用Exit函数中的选项,从而退出脚本;如果Choose值既不是1也不是2的话,会在桌面显示sb,然后两秒后清屏再次进入循环。

练习 

题目

代码

#!/bin/bash

User1=root

Passwd1=abc123,

User2=xiaofa

Passwd2=123123

Lock=""

function Login(){

read -p "请输入用户名:" user

echo $Lock | grep -w "$user" &>/dev/null

[ $? -eq 0 ] && echo "账号被锁定,请登录其他账户" && sleep 2 && return

if [ $user != $User1 -a $user != $User2 ]; then

        echo "用户名输入有误!"

        sleep 2

        return

fi

for i in 3 2 1

do

        read -p "您还有$i次尝试次数,请输入$user用户的密码:" passwd

        if [ $passwd == $Passwd1 -a $user == $User1 ]; then

                echo "$user用户登陆成功,程序退出"

                exit 0

        elif [ $passwd == $Passwd2 -a $user == $User2 ]; then

                echo "$user用户登录成功,程序退出"

                exit 0

        fi

done

echo "$user用户的密码已经输错3次,账户已经被锁定"

Lock=$Lock"$user"

sleep 2

}

function Title(){

cat <<FOF

**********************

        1.登录

        2.退出

**********************

FOF

read -p "请输入你的选择:" Choose

}

function Exit(){

        echo "程序退出"

        exit

}

while :

do

        clear

        Title

        case $Choose in

                1)

                        Login

                ;;

                2)

                        Exit

                ;;

                *)

                        echo "sb"

                        sleep 2

                ;;

        esac

done

解析

效果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值