在 Linux 中,$0
、$1
、$#
、$@
、$*
、$?
、$$
等符号在 shell 脚本中经常使用,它们用于处理脚本参数、变量和状态。此外,^^
、,,
是模式替换符,用于修改字符串大小写。还有很多其他的选项和表达式可以用于控制脚本的行为。
1. 位置参数变量
-
$0
: 当前脚本或命令的名称。echo "Script name: $0"
-
$1
至$9
: 传递给脚本的第一个到第九个参数。echo "First parameter: $1" echo "Second parameter: $2"
-
$#
: 传递给脚本的参数总数。echo "Number of parameters: $#"
-
$@
: 传递给脚本的所有参数,每个参数是独立的字符串。for param in "$@" do echo "Parameter: $param" done
-
$*
: 传递给脚本的所有参数,作为一个单一的字符串。echo "All parameters: $*"
2. 其他特殊变量
-
$?
: 上一个命令的退出状态,0
表示成功,非0
表示失败。ls /nonexistent_directory echo "Exit status: $?"
-
$$
: 当前 shell 脚本的进程 ID。echo "Process ID: $$"
-
$!
: 最近执行的后台命令的进程 ID。sleep 10 & echo "Last background job PID: $!"
3. 字符串模式替换符
-
^^
: 将字符串中的所有小写字母转换为大写字母。var="hello world" echo "${var^^}"
-
,,
: 将字符串中的所有大写字母转换为小写字母。var="HELLO WORLD" echo "${var,,}"
-
${var^}
: 将字符串的第一个字符转换为大写。var="hello world" echo "${var^}"
-
${var,}
: 将字符串的第一个字符转换为小写。var="HELLO WORLD" echo "${var,}"
4. 参数处理选项
-
-a
: 在shopt
中启用或禁用数组变量索引扩展(需要使用shopt -s
或shopt -u
)。 -
-b
: 在 Bash 中,启动脚本时可以用来执行read
命令或设置变量之前的提示符。 -
-e
: 启用脚本中的set -e
选项,使得脚本在遇到第一个错误(退出状态非零)时停止执行。 -
-f
: 禁用文件名扩展(globbing),例如*
和?
。 -
-n
: 读取命令但不执行,用于检查语法。 -
-u
: 当引用未设置的变量时,返回错误。 -
-v
: 在执行每一行命令之前,将其打印到标准输出。 -
-x
: 在执行每一行命令之前,将其打印到标准输出(通常用于调试)。
5. Bash 的表达式选项
-
$((expression))
: 算术扩展,用于执行算术运算。result=$((3 + 5)) echo "Result: $result"
-
${var:-default}
: 如果变量var
未定义或为空,返回default
。echo "${name:-'default_name'}"
-
${var:=default}
: 如果变量var
未定义或为空,将其设置为default
,并返回default
。echo "${name:='default_name'}"
-
${var:+replacement}
: 如果变量var
已定义且不为空,返回replacement
;否则返回空字符串。echo "${name:+'replacement_name'}"
-
${var:?error_message}
: 如果变量var
未定义或为空,打印error_message
并退出脚本。echo "${name:?'Name not defined'}"
-
${#var}
: 返回变量var
的长度。echo "Length of name: ${#name}"
6. 条件表达式
-
[[ expression ]]
: 用于测试条件的高级测试命令,支持字符串比较、模式匹配等。if [[ "$name" == "admin" ]]; then echo "Welcome, admin!" fi
-
-eq
: 数字相等。 -
-ne
: 数字不等。 -
-lt
: 小于。 -
-le
: 小于或等于。 -
-gt
: 大于。 -
-ge
: 大于或等于。 -
-z
: 字符串为空。 -
-n
: 字符串不为空。
7. 文件测试表达式
-e file
: 文件存在。-f file
: 文件是普通文件。-d file
: 文件是目录。-r file
: 文件可读。-w file
: 文件可写。-x file
: 文件可执行。
这些符号和选项在 Linux 脚本编程中非常有用,熟练掌握它们可以编写出功能强大且灵活的脚本。