shell(5)--case菜单和echo
文章目录
- case菜单
- case语句的概念
- case语句的基本格式
- 示例:Shell脚本菜单
- 输出变量值
- 禁用转义字符(默认行为)
- 禁止末尾换行
- 输出到文件
- 特殊字符处理
- 显示命令执行结果
- 常见问题解决
case菜单
case语句的概念
case语句是一种多分支条件判断结构,用于基于变量或表达式的值匹配不同模式并执行对应代码块。它比多个if-elif语句更简洁,适合处理固定范围的条件匹配(如菜单选择、状态码处理等)。
case语句的基本格式
语法结构如下:
case $变量 in 模式1) 命令1 ;; 模式2|模式3) 命令2 ;; *) 默认命令 ;;
esac
- 模式:支持通配符(如
*匹配任意字符,?匹配单个字符)和逻辑或(|)。 ;;:表示当前模式对应的代码块结束。*):默认分支,相当于if-else中的else。esac:case的反写,表示结构结束。
示例:Shell脚本菜单
以下是一个交互式菜单的示例脚本,通过case实现功能选择:
#!/bin/bash
while true; do echo "1. 查看系统信息" echo "2. 显示磁盘使用" echo "3. 退出" read -p "请输入选项(1-3): " choice case $choice in 1) echo "系统信息如下:" uname -a ;; 2) echo "磁盘使用情况:" df -h ;; 3) echo "退出菜单。" exit 0 ;; *) echo "无效选项,请重新输入!" ;; esac echo # 空行分隔每次菜单显示
done
管理服务的菜单
read -p "请问你需要管理哪个服务:" SERVICE
read -p "请问你需要进行什么管理(status--查看状态,stop--停止,restart--重启)" CONTROL
case ${CONTROL} in
status) systemctl status ${SERVICE} ;; start) systemctl start ${SERVICE} ;; stop) systemctl stop ${SERVICE} ;; *) echo "输入有误" ;; esac
```---### 关键注意事项
- **模式匹配**:默认是通配符匹配,若需精确匹配数字或字符串,避免使用通配符(如直接写`3)`而非`3*)`)。
- **终止符**:每个分支必须以`;;`结束,否则会继续执行下一个分支的代码。
- **默认分支**:建议始终包含`*)`分支以处理意外输入。 ## echo
### echo命令的基本功能
`echo` 是一个在终端输出文本或变量的基础命令,适用于所有主流的操作系统(如Linux、macOS、Windows的PowerShell)。直接输入`echo`后接内容,会将内容原样显示在屏幕上。 **示例:**
```bash
echo "Hello World"
输出结果为:
Hello World
输出变量值
echo 可以显示环境变量或用户自定义变量的值。变量需以$符号开头。
示例:
name="Alice"
echo "Welcome, $name!"
输出结果为:
Welcome, Alice!
禁用转义字符(默认行为)
默认情况下,echo 会将反斜杠\视为普通字符。若需启用转义字符(如\n换行),需添加-e选项。
示例:
echo -e "Line 1\nLine 2"
输出结果为:
Line 1
Line 2
禁止末尾换行
通过-n选项,可以取消输出末尾的自动换行符。
示例:
echo -n "No newline"
echo " continued"
输出结果为:
No newline continued
输出到文件
使用重定向符号>或>>可将echo内容写入文件(覆盖或追加)。
覆盖文件内容:
echo "New content" > file.txt
追加内容到文件末尾:
echo "More content" >> file.txt
特殊字符处理
若需输出包含特殊符号(如$、")的文本,可用单引号''包裹,或使用反斜杠\转义。
示例:
echo 'Cost: $5'
echo "Quote: \"To be or not to be\""
显示命令执行结果
通过反引号 或$()嵌套命令,echo 可输出其他命令的结果。
示例:
echo "Today is $(date)"
输出结果为当前日期,例如:
Today is Mon Jul 1 12:00:00 UTC 2024
常见问题解决
- 变量不生效:确保变量已正确定义且无拼写错误。
- 换行无效:检查是否遗漏
-e选项。 - 权限问题:写入文件时需确保对目标目录有写权限。
