外壳变量可以是全局变量,也可以是局部变量。全局变量(或环境变量)可以在所有外壳中访问。而局部变量仅在当前外壳中可见。
要查看所有环境变量,请使用 printenv 命令。如果需要知道变量的值,请将变量名称作为自变量插入:
printenv PATH
也可以使用 echo 查看变量(无论是全局或本地变量):
echo $PATH
要设置局部变量,请使用变量名后加等号和值:
PROJECT="SLED"
不要在等号两边插入空格,否则会出错。要设置环境变量,请使用 export:
export NAME="tux"
要删除变量,请使用 unset:
unset NAME
下表包含外壳脚本中可以使用的一些常见环境变量:
表 7.5. 有用的环境变量
|
|
当前用户的用户主目录 |
|
|
当前主机名 |
|
|
当一个工具本地化后,它使用此环境变量中的语言。英语也可以设置为 |
|
|
外壳的搜索路径,冒号分隔的目录列表 |
|
|
指定在每个命令前打印的普通提示符 |
|
|
指定在执行多行命令时打印的辅助提示符 |
|
|
当前工作目录 |
|
|
当前用户 |
例如,如果具有脚本 foo.sh,则可以如下执行:
foo.sh "Tux Penguin" 2000
要访问传递给脚本的所有自变量,您需要定位参数。$1 表示第一个自变量,$2 表示第二个自变量,依此类推。至多可以有九个参数。要获取脚本名称,请使用 $0。
以下脚本 foo.sh 打印从 1 到 4 的所有自变量:
#!/bin/sh echo \"$1\" \"$2\" \"$3\" \"$4\"
如果使用上述自变量执行此脚本,将获取:
"Tux Penguin" "2000" "" ""
变量替代将一个模式应用于变量的内容(从左侧或从右侧)。以下列表包含可能的语法格式:
${VAR#pattern}
从左侧删除可能的最短匹配:
file=/home/tux/book/book.tar.bz2
echo ${file#*/}
home/tux/book/book.tar.bz2${VAR##pattern}
从左侧删除可能的最长匹配:
file=/home/tux/book/book.tar.bz2
echo ${file##*/}
book.tar.bz2${VAR%pattern}
从右侧删除可能的最短匹配:
file=/home/tux/book/book.tar.bz2
echo ${file%.*}
/home/tux/book/book.tar${VAR%%pattern}
从右侧删除可能的最长匹配:
file=/home/tux/book/book.tar.bz2
echo ${file%%.*}
/home/tux/book/book${VAR/pattern_1/pattern_2}
将来自 pattern_1 的 VAR 的内容替代为 pattern_2:
file=/home/tux/book/book.tar.bz2
echo ${file/tux/wilber}
/home/wilber/book/book.tar.bz2