Shell 流程控制 (if与case)

流程控制:if

模式匹配:case

command命令

 

 

流程控制:if

#单分支结构
if 条件测试;then
    命令序列
fi

#双分支结构
if 条件测试;then
    命令序列
else
    命令序列
fi

#多分支序列
if 条件测试1;then
    命令序列
elif 条件测试2;then
    命令序列
elif 条件测试3;then
    命令序列...
else
    命令序列
fi

#示例
read -p "确认开始安装KVM[y]: " kvm_install
if [ ! "${kvm_install}" = "y" ];then
    echo "输入不正确! "
    exit
fi

模式匹配:case

#case 语法结构
case "变量" in
模式1)
    命令序列1
    ;;
模式2)
    命令序列2
    ;;
模式3)
    命令序列3
    ;;
*)
    无匹配后命令序列
esac

示例

case 示例
cat del_user.sh
#!/bin/bash
read -p "请输入要删除的用户: " user

id $user &>/dev/null
if [ $? -ne 0 ];then
    echo "$user: no such user"
    exit 1
fi

read -p "确定要删除吗?[y/n]: " action
#if [ "$action" = "y" ];then
#    userdel -r $user
#    echo "用户$user已删除"
#fi

case "$action" in
y|yes)
    userdel -r $user
    echo "$user 用户已删除"
    ;;
n|no)
    echo "取消删除成功!"
    ;;
*)
    echo “请输入正确的参数!”
    ;;
esac

小作业

系统管理工具箱
#!/bin/bash
menu(){
	cat <<-EOF
	#########################
	#	h 显示帮助命令		
	#	f 显示磁盘分区		
	#	d 显示磁盘挂载		
	#	m 查看内存使用	
	#	q 退出当前程序 	
	##########################
EOF
}
menu
while true
do
        read -p "Command(h for help): " action
	case "$action" in
	h|help)
	    clear
	    menu
	    ;;
	f)
	    lsblk
	    ;;
	d)
	    df -h
	    ;;
	m)
	    free -h
	    ;;
	u)
	    uptime
	    ;;
	q)
	    #exit  #退出程序
            break  #跳出循环
	    ;;
        "")        #如果为空不输出下面的"*"
            ;;
	*)
	    echo "请输入正确的参数"
	    ;;
	esac
done
echo "finish....."

小作业2

简单的JumpServer
创建简单的jumpserver服务器,将脚本放入.bash_profile 文件中,登录到服务器自动执行该脚本,trap捕捉键盘输入^C 等操作。

#!/bin/bash
trap "" HUP INT OUIT TSTP  # 捕捉到对应信号什么都不做

web1=192.168.128.186
web2=192.168.128.187
web3=192.168.128.200

while true
do
        clear
	cat <<-EOF
	+-----------------------+
	|	JumpServer      |
	|	1.web1	        |
	|	2.web2	        |
	|	3.web3	        |
	+-----------------------+
EOF
        echo -en "\e[31minput number: \e[0m"
	read num

	case "$num" in
	1)
	    ssh south@$web1
	    ;;
	2)
	    ssh south@$web2
	    ;;
	3)
	    ssh south@$web3
	    ;;
        4)
            exit
            ;;
	"")
	    ;;
	*)
	    echo "error"
	    ;;
	esac
done

 cat .bash_profile
 ...
 /home/south/jumpserver.sh
 
登出文件
    .bash_history
    .bash_logout
系统级别的启动文件
    /etc/profile
    /etc/bashrc
用户级别启动文件
    .bash_profile
    .bashrc

 

command命令

~ » command -v /etc/hosts 
~ » echo $?
1
~ » command -v ls
alias ls='ls -G'
~ » command -v /bin/ls
/bin/ls
~ » echo $?
0
使用command -v 查看是否是一个命令。

cat if_command.sh
#!/bin/bash
cmd=/bin/ls
if command -v $cmd &>/dev/null;then
    :     # 使用":|true"参数 脚本为真,不输出任何内容。
else
    echo "$cmd is not command"
fi

whoami命令

$ w
 00:02:32 up  1:00,  3 users,  load average: 0.02, 0.02, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      23:02    1:00m  0.01s  0.01s -bash
root     pts/0    192.168.128.1    23:02   17:20   0.15s  0.00s sh jumpserver.sh
root     pts/1    192.168.128.1    23:44    0.00s  0.06s  0.03s w

$ who
root     tty1         2022-05-23 23:02
root     pts/0        2022-05-23 23:02 (192.168.128.1)
root     pts/1        2022-05-23 23:44 (192.168.128.1)

$ whoami
root

 

posted @ 2022-05-21 23:19  南哈哈  阅读(92)  评论(0)    收藏  举报