shell编程笔记
变量定义
在 Shell 中,变量定义无需声明类型,直接赋值即可。变量名区分大小写,建议使用大写字母命名环境变量,小写字母命名局部变量。赋值时等号(=
)两边不能有空格。
MY_VAR="Hello World" # 定义变量
local_var=123 # 局部变量
变量引用
使用 $
符号或 ${}
引用变量。${}
可以避免歧义,例如变量名与后续字符粘连时。
echo $MY_VAR # 输出变量值
echo "Value: ${local_var}abc" # 避免解析为 $local_varabc
特殊变量
Shell 提供一些特殊变量,用于脚本操作:
$0
:脚本名称$1
,$2
, …:脚本参数$#
:参数个数$?
:上一条命令的退出状态(0 表示成功)$$
:当前脚本的进程 ID
echo "Script name: $0"
echo "First argument: $1"
echo "Total arguments: $#"
环境变量
环境变量可用于所有子进程。使用 export
命令将变量提升为环境变量。
export PATH=$PATH:/usr/local/bin # 追加路径到 PATH
env | grep PATH # 查看环境变量
变量操作
字符串操作
name="shell_script"
echo ${name:0:5} # 截取前5个字符(输出 "shell")
echo ${name#shell} # 删除前缀(输出 "_script")
echo ${name/_/-} # 替换第一个 _ 为 -(输出 "shell-script")
默认值设置
unset var
echo ${var:-default} # 若 var 未定义,输出 "default"
echo ${var:=default} # 若 var 未定义,赋值并输出 "default"
数组定义与操作
Shell 支持一维数组,下标从 0 开始。
fruits=("apple" "banana" "cherry")
echo ${fruits[1]} # 输出 "banana"
echo ${fruits[@]} # 输出所有元素
echo ${#fruits[@]} # 输出数组长度
fruits+=("orange") # 追加元素
只读变量
使用 readonly
标记的变量不可修改。
readonly PI=3.14
PI=3.14159 # 报错:readonly variable
删除变量
使用 unset
删除变量,但无法删除只读变量。
unset MY_VAR # 删除变量
命令替换
将命令输出赋值给变量,使用 $()
或反引号 `
。
current_date=$(date)
echo "Today is $current_date"
算术运算
使用 $(( ))
进行整数运算。
sum=$(( 5 + 3 * 2 ))
echo "Result: $sum" # 输出 11
注意事项
- 变量赋值时避免空格:
var=value
正确,var = value
会报错。 - 字符串赋值无需引号,但包含空格或特殊字符时需要引号。
- 单引号(
'
)不解析变量,双引号("
)会解析变量。