Shell 编程学习笔记

1. 变量与常量

Shell 中使用 = 进行变量赋值,$ 符号用于访问变量。

name="Alice"
echo $name

注意事项:赋值时不要在等号两侧加空格。

2. 数据类型

Shell 中的变量没有数据类型,所有内容默认是字符串。

num=42
text="Hello"

易错点:使用算术运算时,确保变量内容为数字。

3. 条件控制

Shell 使用 ifelseelif 进行条件判断。

if [ $num -gt 10 ]; then
    echo "Greater than 10"
else
    echo "10 or less"
fi

注意事项:条件判断符号前后需有空格,例如 -gt 表示大于。

4. 循环

Shell 支持 forwhileuntil 循环。

for i in 1 2 3; do
    echo "Number $i"
done

易错点:循环结束时使用 done,循环条件和代码间用 do

5. 函数

Shell 函数通过函数名定义,参数通过 $1$2 等访问。

greet() {
    echo "Hello, $1"
}
greet "Alice"

注意事项:函数名称与 Shell 内置命令不要冲突。

6. 文件操作

使用 catecho 和重定向符号进行文件读写。

echo "Hello" > file.txt   # 写入
cat file.txt              # 读取

注意事项: > 重定向会覆盖文件内容,>> 追加内容。

7. 管道和重定向

管道 | 将前一个命令的输出作为下一个命令的输入。

cat file.txt | grep "pattern"

注意事项:重定向 > 写文件,>> 追加文件。

8. 脚本参数

使用 $1$2 等访问脚本参数,$# 表示参数数量。

echo "First argument: $1"
echo "Total arguments: $#" 

注意事项:确保参数数量符合脚本需求,避免越界。

高级与小众用法

数组

Shell 支持数组,通过 ( ) 创建,用 ${array[index]} 访问。

arr=("apple" "banana" "cherry")
echo ${arr[1]}

注意事项:数组索引从 0 开始。

字符串操作

Shell 支持字符串长度、子字符串提取等操作。

str="hello"
echo ${#str}      # 字符串长度
echo ${str:1:3}   # 子字符串提取

易错点:字符串索引从 0 开始。

命令替换

使用 $(command) 或反引号执行命令并获取输出。

current_date=$(date)

注意事项: $(command) 替代反引号,更易读。

退出状态

Shell 命令执行后的退出状态存储在 $? 中。

if [ $? -eq 0 ]; then
    echo "Success"
else
    echo "Failure"
fi

注意事项: $? 仅获取最后一个命令的状态。

数学运算

Shell 支持整数运算,使用 $(( ))expr

result=$((5 + 3))

易错点:小数计算需使用 bc,Shell 默认不支持浮点数。

定时任务

使用 cron 定时执行 Shell 脚本。

0 0 * * * /path/to/script.sh

注意事项: cron 使用绝对路径,避免路径依赖问题。