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
函数
- 函数的定义
function_name() { # 函数内部使用的$1等等是局部变量,不会和命令行参数的$1等冲突 # 可以将命令行参数作为函数参数,这样就能达到函数内使用命令行参数的效果了 # $1, $2, ..., $N 代表传递给函数的第1、2、...、N个参数 echo "第一个参数: $1" echo "第二个参数: $2" # 可以根据需要使用更多的参数,也可以不使用参数 local param="Hello, World!" # 这是一个局部变量 param1="Hello, World!" # 这是一个全局变量 } - 函数的调用
# 带参函数的调用 function_name "参数1" "参数2" # 无参函数的调用 function_name
扩展
-
定义数组
-
定义数组并赋值
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
posted on
浙公网安备 33010602011771号