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
本文作者:南哈哈
本文链接:https://www.cnblogs.com/nanruosen/p/16296399.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步