a=letter
letter=z
echo "$a" # letter
eval a=\$$a
echo "$a" # z
在Bash 2中引入了这样的形式,echo ${!a}
$RANDOM # 每次调用会返回一个不同的随机数
set set用于在scripts内部给出其运行参数
set hello world
echo $1 # hello
echo $2 # world
通配符的使用例子
for file in * # 出现通配符*和?,那会进行文件名扩展 file globbing
do
ls -al "$file" # 就相当于列出当前目录的所有文件
done
对于利用类似如下方式进行循环的做法:
通过read可以保证每次读取一行,如果利用for循环要注意带space的文件名的问题;
改变IFS来规避此问题。
find ./ -type f -name '*' | sort | while read file
do
...
done
tmp=$IFS
IFS='#'
for file in $(find ./ -type f -name '*' | tr '\n' '#')
do
...
done
IFS=$tmp
循环控制
break 命令会跳出循环
continue 命令会跳出本次循环,继续下一次循环
case使用例子:
while [ $# -gt 0 ]
do
case "$1" in
"-d" | "--debug")
DEBUG=1;;
"-c" | "--config")
CONFIG="$2"
shift
esac
shift
done