shell脚本问题归纳

2026-6-24 10 6/24

1.换行符(CRLF)问题

root@localhost:~# bash change_yum_v2.sh 
change_yum_v2.sh: 行 9: $'\r': 未找到命令
change_yum_v2.sh: 行 21: $'\r': 未找到命令
change_yum_v2.sh: 行 30: $'\r': 未找到命令
change_yum_v2.sh: 行 38: $'\r': 未找到命令
change_yum_v2.sh: 行 42: $'\r': 未找到命令
change_yum_v2.sh: 行 44: 未预期的记号 "$'{\r'" 附近有语法错误
'hange_yum_v2.sh: 行 44: `show_header() {

脚本是在window上notepad上编写的,每一行末尾多了一个不可见的回车符 \r(CR),Bash 解释器把 \r 当成命令的一部分,于是:

  • 看到 \r 以为是命令名,就报 “未找到命令”

  • 函数定义 show_header() { 变成了 show_header() {\r,导致 语法错误

处理方式:

方法一:用 dos2unix 转换(推荐)

dos2unix change_yum_v2.sh

###如没有的话 需要安装
yum install dos2unix -y   # CentOS/RHEL
apt install dos2unix -y   # Debian/Ubuntu

方法二:用 sed 直接删除回车符

sed -i 's/\r$//' change_yum_v2.sh

方法三:用 vim 查看并转换

vim change_yum_v2.sh
:set ff=unix
:wq

2、关于颜色输出

拆解一下这个绿色的 GREEN='\033[32m'

GREEN='\033[32m'
其实是由三部分组成
\033[ +效果代码+m
\033 这是固定的开始符 也可以写成 \e[
32 这是颜色代码 (这里是绿色)
m 这是固定的结束符

最关键的规则

只要写了开始符\033[ ,后面所有得字符都会变色,直到你遇到重置符\033[0m

颜色对照表

Shell 里的颜色主要分 前景色(文字颜色)和 背景色

普通颜色(最常用)

效果
代码
示例 (复制运行)
黑色
30
echo -e "\033[30m 黑 \033[0m"
红色
31
echo -e "\033[31m 红 \033[0m"
绿色
32
echo -e "\033[32m 绿 \033[0m"
黄色
33
echo -e "\033[33m 黄 \033[0m"
蓝色
34
echo -e "\033[34m 蓝 \033[0m"
紫色
35
echo -e "\033[35m 紫 \033[0m"
青色
36
echo -e "\033[36m 青 \033[0m"
白色
37
echo -e "\033[37m 白 \033[0m"
重置
0
用于关闭所有属性

高亮颜色(加粗/亮色)

只需要把上面的 3 换成 9,颜色会变得更亮(或者加粗,取决于终端)。
效果
代码
示例
亮红
91
echo -e "\033[91m 亮红 \033[0m"
亮绿
92
echo -e "\033[92m 亮绿 \033[0m"
亮黄
93
echo -e "\033[93m 亮黄 \033[0m"
亮蓝
94
echo -e "\033[94m 亮蓝 \033[0m"

背景颜色

如果你想把字背后的底色变了,把代码开头的 3 换成 4。
效果
代码
示例
红底
41
echo -e "\033[41m 红底白字 \033[0m"
绿底
42
echo -e "\033[42m 绿底白字 \033[0m"
黄底
43
echo -e "\033[43m 黄底黑字 \033[0m"

常用的颜色

  1. 绿色 (\033[32m)成功 / INFO
    • 用途:显示“安装成功”、“服务已启动”、“IP配置完成”。
  2. 黄色 (\033[33m)警告 / WARN
    • 用途:显示“配置文件已存在,将被覆盖”、“磁盘空间不足80%”。
  3. 红色 (\033[31m)错误 / ERROR
    • 用途:显示“连接失败”、“权限拒绝”、“命令不存在”。
  4. 蓝色 (\033[34m)提示 / INFO (次要)
    • 用途:显示“正在下载...”、“加载模块...”。
  5. 青色 (\033[36m)用户输入
    • 用途:高亮显示用户刚刚输入的内容,确认是否正确。
## 定义颜色和样式变量
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
BLUE='\033[34m'
PURPLE='\033[35m'
AZURE='\033[36m'
PLAIN='\033[0m'
BOLD='\033[1m'
DIM='\033[2m'

SUCCESS="\033[1;32m✔${PLAIN}"
COMPLETE="\033[1;32m✔${PLAIN}"
WARN="\033[1;43m WARN ${PLAIN}"
ERROR="\033[1;31m✘${PLAIN}"
FAIL="\033[1;31m✘${PLAIN}"
TIP="\033[1;44m TIP ${PLAIN}"
WORKING="\033[1;36m◉${PLAIN}"

 

- THE END -

delu

7月31日16:33

最后修改:2026年7月31日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论