一、Shell脚本基础入门
1.1 第一个Shell脚本开发流程
#!/bin/bash # 指定解释器路径
echo "Hello World" # 输出字符串
- 编写脚本:保存为
echo.sh
- 赋予权限:
chmod +x echo.sh
- 运行脚本:
./echo.sh 或 sh echo.sh
1.2 echo命令高级用法
| 功能场景 | 示例代码 | 说明 |
| 普通输出 | echo "Hello Shell" | 直接输出字符串 |
| 换行输出 | echo -e "Line1\nLine2" | -e开启转义,支持\n换行 |
| 命令结果输出 | echo $(date) | 输出命令执行结果(推荐写法) |
| 颜色输出 | echo "\033[31m红色文本\033[0m" | 31=红色,0m恢复默认颜色 |
| 文件覆盖 | echo "内容" > file.txt | 覆盖写入文件 |
| 文件追加 | echo "内容" >> file.txt | 追加写入文件 |
二、变量与参数传递机制
2.1 变量操作核心语法
name="Alice" # 定义字符串变量
age=18 # 定义数值变量
now=$(date +%F) # 命令结果赋值(推荐写法)
echo "姓名:$name,年龄:$age,日期:$now" # 变量引用
echo $? # 查看上一条命令执行状态(0=成功)
2.2 参数传递与输入处理
#!/bin/bash
echo "脚本名:$0" # 输出脚本名称
echo "参数个数:$#" # 输出参数数量
echo "第一个参数:$1" # 输出第一个参数
echo "所有参数:$*" # 输出所有参数
# 键盘输入示例
read -p "请输入姓名:" user_name
echo "你好,$user_name!"
三、运算符与条件判断
3.1 算术运算符(整数运算)
| 运算符 | 示例 | 说明 |
+ | $((a+b)) | 加法 |
- | $((a-b)) | 减法 |
* | $((a*b)) | 乘法 |
/ | $((a/b)) | 除法(取整) |
% | $((a%b)) | 取余 |
3.2 关系运算符(数值比较)
| 运算符 | 说明 | 示例 |
-eq | 等于 | [ $a -eq $b ] |
-ne | 不等于 | [ $a -ne $b ] |
-gt | 大于 | [ $a -gt $b ] |
-lt | 小于 | [ $a -lt $b ] |
条件判断示例:
a=5; b=3
if [ $a -eq $b ]; then
echo "相等"
else
echo "不等" # 输出结果:不等
fi
3.3 文件测试运算符
dir="/data/logs"
file="/etc/hosts"
if [ -d "$dir" ]; then # 判断目录是否存在
echo "目录存在"
fi
if [ -f "$file" ]; then # 判断文件是否存在
echo "文件存在"
fi
四、流程控制与循环结构
4.1 条件判断结构
if-else结构
score=85
if [ $score -ge 90 ]; then
echo "优秀"
elif [ $score -ge 80 ]; then
echo "良好"
else
echo "及格"
fi
case结构
action="start"
case $action in
"start")
echo "启动服务"
;;
"stop")
echo "停止服务"
;;
*)
echo "未知操作"
;;
esac
4.2 循环结构
for循环(数值遍历)
# 遍历不连续数值
for i in 1 3 5 7; do
echo $i
done
# 遍历连续数值(1-100)
for i in $(seq 100); do
echo $i
done
while循环(文件内容处理)
while read line; do
echo "行内容:$line"
done < file.txt # 从文件读取内容逐行处理
五、函数与代码复用
5.1 函数定义与调用
# 带参数函数
function calculate() {
local a=$1; local b=$2
local sum=$((a+b))
echo "和为:$sum" # 通过echo返回结果
}
# 调用函数
result=$(calculate 5 3)
echo $result # 输出:和为:8
5.2 函数返回值
function check_status() {
if [ -f "data.txt" ]; then
return 0 # 成功返回0
else
return 1 # 失败返回非0
fi
}
check_status
echo "状态码:$?" # 输出文件存在状态
六、输入输出重定向技术
| 类型 | 示例命令 | 说明 |
| 标准输入 | read var < input.txt | 从文件读取输入到变量 |
| 标准输出 | ls > output.log | 覆盖写入文件 |
| 追加输出 | echo "info" >> log.txt | 追加写入文件 |
| 错误输出 | command 2> error.log | 错误信息单独写入文件 |
| 混合输出 | command &> all.log | 所有输出写入同一文件 |
| 静默执行 | command >/dev/null 2>&1 | 丢弃所有输出(黑洞机制) |
七、Chat GPT辅助Shell脚本开发
7.1 智能生成脚本示例
需求:编写参数校验的算术运算脚本
#!/bin/bash
# 自动生成:Chat GPT
if [ $# -ne 2 ]; then
echo "请提供两个数字参数" >&2
exit 1
fi
if ! [[ $1 =~ ^[0-9]+$ && $2 =~ ^[0-9]+$ ]]; then
echo "参数必须为整数" >&2
exit 1
fi
echo "加法:$(( $1 + $2 ))"
echo "减法:$(( $1 - $2 ))"
echo "乘法:$(( $1 * $2 ))"
[ $2 -eq 0 ] && echo "除法:除数不能为0" || echo "除法:$(( $1 / $2 ))"
7.2 自动化运维脚本
需求:自动创建带时间戳的文件
#!/bin/bash
folder="backup"
[ ! -d "$folder" ] && mkdir "$folder" # 目录不存在则创建
timestamp=$(date +%Y%m%d%H%M%S)
touch "$folder/file_$timestamp.txt"
echo "创建文件:$folder/file_$timestamp.txt"