语法基础

default

Shell 语法基础

变量

Shell 中存在三种变量:

  • 局部变量:局部变量在脚本或命令中定义,仅在当前 shell 实例中有效,其他 shell 启动的程序不能访问局部变量。

  • 环境变量:所有的程序,包括 shell 启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候 shell 脚本也可以定义环境变量。

  • shell 变量:shell 变量是由 shell 程序设置的特殊变量。shell 变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了 shell 的正常运行。

定义变量时,变量名不加美元符号,并且变量名和等号之间不能有空格;使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

your_name="qinjx"
echo $your_name
echo ${your_name}
# 删除变量
unset variable_name

变量名外面的花括号是可选的,为了帮助解释器识别变量的边界,区分譬如 ${skill}Script 这样的情况。除了显式地直接赋值,还可以用语句给变量赋值,如:

for file in *; do
if [ -f "$file" ]; then
echo "$file"
fi
done
for file in $(ls /etc)
for file in `ls /etc`

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变:

myUrl="http://www.google.com"
readonly myUrl

参数处理

if test $# = 1
then
start=1
finish=$1
elif test $# = 2
then
start=$1
finish=$2
else
echo "Usage: $0 <start> <finish>" 1>&2
exit 1
fi
for argument in "$@"
do
if echo "$argument"|egrep -v '^-?[0-9]+$' >/dev/null
then
echo "$0: argument '$argument' is not an integer" 1>&2
exit 1
fi
done
number=$start
while test $number -le $finish
do
echo $number
number=`expr $number + 1` # or number=$(($number + 1))
done