4>位置变量或Shell参数
在shell解释用户的命令时,将把命令行的第一个字作为命令,而其他的字作为参数。当命令对应的可执行文件为Shell程序时,这些参数将作为位置变量传送给该程序。第一个参数记为,第二个为....第九个为。其中1到9是真正的参数名,"$"符只是用来标识变量的替换。
位置变量指命令对应的可执行文件名。在后面将详细介绍位置变量。
1.只读变量
用户将变量赋值后,为了防止以后对该变量的修改,可以用以下命令将该变量设置为只读变量:
readonly variable
2.export命令
shell执行一个程序时,首先为该程序建立一个新的执行环境,称为子shell。在Bourne Shell中变量都是局部的,即他们只在创建他们的Shell中有意义。用户可以用export命令让变量被其他子Shell识别。但某用户的变量是没法让其他用户使用的。
当用户启动一个新shell时,该shell将使用默认的提示符。因为赋给变量PS1的值只在当前shell中有效。为了让子Shell使用当前Shell中定义的提示符号,可以使用export命令:
$PS1="Enter command:"
Enter command:export PS1
Enter command:sh
Enter command:
此时变量PS1变成了全局变量。它可以被其子Shell使用。当变量被设置成全局的以后,将一直保持有效直到用户退出该变量所在的Shell。用户可以在文件.profile中给一个变量永久赋值。详见"规范Shell"。
基本语句
从本节起,我们将详细介绍Shell程序设计的基本知识,通过编写Shell脚本,用户可以根据自己的需要有条件的或者重复的执行命令。通过Shell程序,可以把单个的UNIX命令组合成一个完全实用的工具,完成用户的任务。
1>什么是Shell程序
当用户在UNIX Shell中输入了一条复杂的命令,如:
$ls -R /|greo myname |pg
我们可以称用户在对Shell编程,当把这条语句写在一个文件里,并且符给该文件可执行权限,那么该文件就是我们传统上说的Shell程序。
2>简单的Shell程序
假设用户每天使用下述命令备份自己的数据文件:
$cd /usr/icewalk;ls * |cpio -o > /dev/fd0
我们可以把它写在一个文件,如:ba.sh中:
$cat >ba.sh
cd /usr/icewalk
ls * |cpio -o > /dev/fd0
^D (ctrl_d)
程序ba.sh就是Shell脚本,用户可以用vi或其他编辑工具编写更复杂的脚本。
此时用户备份文件只需要执行Shell程序ba.sh,执行时需在当前Shell中创建一个子Shell:
$sh ba.sh
程序sh与用户登陆时执行的Bourne Shell相同,但当Sh命令带参数ba.sh后,它将不再是一个交互式的Shell,而是直接从文件ba.sh中读取命令。
执行ba.sh中命令的另一方法是给文件ba.sh执行权限:
$chmod +x ba.sh
此时,用户可以输入文件名ba.sh做为一个命令来备份自己的数据,需要注意的是,用这种方法执行命令的时候,文件ba.sh必须存在于环境变量$PATH所指定的路径上。
