1. 脚本开头(Shebang)
#!/bin/bash
指定脚本使用 bash 解释器执行
其他常见选择:#!/bin/sh, #!/usr/bin/env bash
2. 注释
# 这是单行注释
:<<EOF
这是
多行
注释
EOF
3. 变量
定义和使用变量
name="张三" # 定义变量,等号两边不能有空格
age=20
echo $name # 使用变量:$变量名
echo ${name} # 推荐使用大括号
环境变量和局部变量
export PATH=$PATH:/usr/local/bin # 环境变量(子进程可访问)
local_var="hello" # 局部变量(仅当前shell)
4. 字符串
str1="Hello"
str2='World' # 单引号内不解析变量
str3="${str1}, ${str2}!" # 字符串拼接
echo "字符串长度: ${#str1}"
echo "子字符串: ${str1:1:3}" # 从索引1开始取3个字符
5. 数组
# 定义数组
fruits=("apple" "banana" "orange")
# 访问数组
echo ${fruits[0]} # 第一个元素
echo ${fruits[@]} # 所有元素
echo ${#fruits[@]} # 数组长度
6. 输入输出
echo "Hello World" # 输出
echo -e "Hello\nWorld" # 支持转义字符
read -p "请输入姓名: " name # 输入
echo "你好, $name"
printf "姓名: %s, 年龄: %d\n" "张三" 20 # 格式化输出
7. 条件判断
if 语句
if [ condition ]; then
# 命令
elif [ condition ]; then
# 命令
else
# 命令
fi
常用判断条件
# 文件判断
[ -f file ] # 文件是否存在
[ -d dir ] # 目录是否存在
[ -x file ] # 文件是否可执行
# 字符串比较
[ "$a" = "$b" ] # 相等
[ "$a" != "$b" ] # 不相等
[ -z "$str" ] # 字符串为空
[ -n "$str" ] # 字符串非空
# 数值比较
[ $a -eq $b ] # 等于
[ $a -ne $b ] # 不等于
[ $a -gt $b ] # 大于
[ $a -lt $b ] # 小于
8. 循环
for 循环
# 遍历列表
for fruit in apple banana orange; do
echo "水果: $fruit"
done
# 遍历数组
for i in "${fruits[@]}"; do
echo "$i"
done
# C风格for循环
for ((i=0; i<10; i++)); do
echo "数字: $i"
done
while 循环
count=1
while [ $count -le 5 ]; do
echo "计数: $count"
((count++))
done
# 读取文件行
while IFS= read -r line; do
echo "行内容: $line"
done < file.txt
9. 函数
# 定义函数
function say_hello() {
local name=$1 # 局部变量
echo "Hello, $name"
return 0
}
# 调用函数
say_hello "张三"
# 获取返回值
result=$(say_hello "李四")
echo "函数输出: $result"
10. 特殊变量
echo "脚本名: $0"
echo "参数个数: $#"
echo "所有参数: $@"
echo "第一个参数: $1"
echo "第二个参数: $2"
echo "进程ID: $$"
echo "上条命令退出状态: $?" # 0表示成功,非0表示失败
11. 命令执行和退出
# 命令执行
result=$(ls -l) # 将命令结果赋值给变量
echo "结果: $result"
# 退出脚本
exit 0 # 0表示成功,非0表示错误
12. 错误处理
set -e # 遇到错误立即退出
set -u # 使用未定义变量时报错
set -o pipefail # 管道中任意命令失败则整个失败
# 检查命令是否成功
if command; then
echo "成功"
else
echo "失败"
fi

137

被折叠的 条评论
为什么被折叠?



