shebang 行
shell脚本的第一行是#!/bin/bash
,/bin/bash是我们用来解释该脚本的shell的路径,这里是用bash,也可以替换成其他的
注释
# 这是一个注释
以 # 开头表示该符号右侧是注释
变量
-
变量赋值
在shell中,变量都是以字符串形式存储的,数字字符串会在进行算术运算时自动转换
# 不能用空格分隔 name="hello" age=1
-
获取变量值
在shell中,使用 $ 符号获取变量值
echo "${name}" # 输出 "hello" echo "$name" # 输出 "hello"
测试条件
-
字符串的比较
-
= :判断两个字符串是否相等
[ "$str1" = "$str2" ]
-
!= :判断两个字符串是否不等
[ "$str1" != "$str2" ]
-
-
数值的比较
-
-eq : 等于
[ "$num1" -eq "$num2" ]
-
-ne : 不等于
[ "$num1" -ne "$num2" ]
-
-lt : 小于
[ "$num1" -lt "$num2" ]
-
-le : 小于或等于
[ "$num1" -le "$num2" ]
-
-gt : 大于
[ "$num1" -gt "$num2" ]
-
-ge : 大于或等于
[ "$num1" -ge "$num2" ]
条件判断
- if语句
if [ condition ]; then commands fi
- if-else语句
if [ condition ]; then commands else commands fi
循环结构
- for循环
for var in list; do commands done
- while循环
while [ condition ]; do commands done
输入和输出
-
read命令: 从标准输入读取数据到变量中
read variable
-
echo命令: 向标准输出打印文本
echo "Hello, World!"
文件(夹)操作:
-
文件夹操作
-
创建文件夹
mkdir directory_name
-
删除空文件夹
rmdir directory_name
-
删除非空文件夹
rm -r directory_name
-
-
文件操作
-
创建文件
touch file_name
-
删除文件
rm file_name
-
命令替换:$(command) 执行命令并将其输出作为变量值
- 示例:
current_date=$(date) echo "Current date and time: $current_date"
错误处理:
- 通过检查最后一个命令的退出状态($?)来处理错误
command if [ $? -ne 0 ]; then echo "Command failed" fi
扩展
-
定义数组
-
定义数组并赋值
arr=(apple banana cherry)
-
定义空数组并逐个赋值
arr=() # 定义一个空数组 arr+=("apple") arr+=("banana") arr+=("cherry")
- 使用索引定义数组
arr=() # 可写可不写 arr[0]="apple" arr[1]="banana" arr[2]="cherry"
-
-
访问数组
#!/bin/bash # 定义一个数组 fruits=(apple banana cherry) # 访问数组的元素 echo "第一个水果是: ${fruits[0]}" echo "第二个水果是: ${fruits[1]}" echo "第三个水果是: ${fruits[2]}" # 输出所有数组元素 echo "所有水果: ${fruits[@]}"
-
获取字符串长度
# 定义一个字符串 str="Hello, world!" # 获取字符串的长度 length=${#str} echo "字符串长度: $length"
-
获取数组长度
# 定义一个数组 arr=(apple banana cherry) # 获取数组的长度(即元素的数量) length=${#arr[@]} echo "数组长度: $length"
-
获取命令行参数
#!/bin/bash # 命令行中的执行:sh ./script.sh arg1 arg2 echo "第一个参数: $1" # 输出arg1的名称 echo "第二个参数: $2" # 输出arg2的名称 echo "所有参数: $@" echo "参数数量: $#"
-
列表的生成
- 使用花括号扩展:
# {1..5} 生成 1 2 3 4 5 # {a..c} 生成 a b c # {A..C} 生成 A B C for i in {1..5}; do echo $i done
- 通过数组:
arr=(apple banana cherry) for fruit in "${arr[@]}"; do echo $fruit done
-
[ ] 是标准的测试命令,用于简单比较
# 单个测试条件 if [ "$a" = "$b" ]; then echo "Equal" fi # 多个测试条件 # 与 && if [ "$a" -gt 10 ] && [ "$b" -lt 20 ]; then echo "条件都满足" fi # 或 || if [ "$a" -eq 0 ] || [ "$b" -eq 0 ]; then echo "至少一个条件满足" fi
-
[[ ]] 是 Bash 扩展,支持更复杂的条件测试
# 单个测试条件 if [[ "$a" = "$b" ]]; then echo "Equal" fi # 多个测试条件 if [[ "$a" == "hello" && "$b" =~ ^[0-9]+$ ]]; then echo "Match" fi
-
( ) 用于创建子 Shell,运行括号内的命令在子 Shell 中
(cd /tmp; ls) # 在子 Shell 中执行 cd 命令,不影响当前 Shell
-
(( )) 用于算术运算,支持更复杂的数学表达式
((sum = 5 + 10)) echo $sum # 输出 15 # 也可以进行数学比较,使用的是数学符号 if (( a > 10 && b < 20 )); then echo "条件都满足" fi if (( a == 0 || b == 0 )); then echo "至少一个条件满足" fi
-
$(( )) 是算术扩展,用于计算表达式并返回结果
a=5 b=10 sum=$((a + b)) echo $sum # 输出 15