Shell脚本编程知识笔记
基础知识
1. Shebang行
#!/bin/bash
- 指定脚本使用的解释器
- 必须放在脚本的第一行
- 常见解释器:
/bin/bash,/bin/sh,/usr/bin/env bash等
2. 注释
# 这是一个注释
- 以
#开头的行为注释 - 注释不会被执行
- 良好的注释有助于理解代码逻辑
变量与字符串
1. 变量定义与使用
NAME="value" # 定义变量(等号两边不能有空格)
echo $NAME # 使用变量
echo ${NAME} # 使用花括号明确变量名边界
2. 命令行参数
$0 # 脚本名称
$1, $2, $3... # 第1、2、3个参数
$# # 参数数量
$@ # 所有参数(作为独立的单词)
$* # 所有参数(作为单个字符串)
3. 字符串操作
${variable#pattern} # 从头删除最短匹配
${variable##pattern} # 从头删除最长匹配
${variable%pattern} # 从尾删除最短匹配
${variable%%pattern} # 从尾删除最长匹配
${variable/old/new} # 替换第一次出现的old为new
${variable//old/new} # 替换所有old为new
示例:
SRC_DIR=${1%/} # 移除末尾斜杠
REL_PATH="${FILE#$SRC_DIR/}" # 删除路径前缀
OUTPUT_FILE="${REL_PATH%.*}.$TARGET_FORMAT" # 替换文件扩展名
控制结构
1. 条件判断
if语句
if [ 条件 ]; then
命令
elif [ 条件 ]; then
命令
else
命令
fi
条件测试
[ -z "$变量" ] # 变量为空
[ -n "$变量" ] # 变量非空
[ "$a" = "$b" ] # 字符串相等
[ "$a" != "$b" ] # 字符串不相等
[ -d "$目录" ] # 目录存在
[ -f "$文件" ] # 文件存在
[ -x "$命令" ] # 文件存在且可执行
[ $a -eq $b ] # 数值相等
[ $a -ne $b ] # 数值不相等
[ $a -lt $b ] # 小于
[ $a -le $b ] # 小于等于
[ $a -gt $b ] # 大于
[ $a -ge $b ] # 大于等于
逻辑运算
[ 条件1 ] && [ 条件2 ] # 逻辑与
[ 条件1 ] || [ 条件2 ] # 逻辑或
! [ 条件 ] # 逻辑非
2. 循环结构
while循环
while [ 条件 ]; do
命令
done
for循环
for 变量 in 列表; do
命令
done
读取文件的循环
while IFS= read -r line; do
echo "$line"
done < 文件名
# 使用分隔符读取
while IFS="|" read -r field1 field2; do
echo "$field1 - $field2"
done < 文件名
函数
1. 函数定义与调用
function_name() {
命令
return 值
}
# 调用函数
function_name 参数1 参数2
2. 函数中的参数
function print_header() {
echo -e "\n${BOLD}${BLUE}=== $1 ===${NC}\n"
}
- 函数内部使用
$1,$2等访问参数 $@表示所有参数$#表示参数数量
命令执行与管道
1. 命令替换
result=$(command) # 推荐的现代语法
result=`command` # 旧式语法
2. 命令退出状态
command
if [ $? -eq 0 ]; then
echo "命令成功"
else
echo "命令失败"
fi