主题
Shell语法 - 变量
概述
在Linux里有很多的变量,大致可分为三种:环境变量、内部变量和用户变量。用户可以通过这些变量获得系统、环境的信息。Shell编程语言中的变量没有类型(即不需要说明变量是数值型还是字符型)。
1.环境变量
环境变量是系统环境的部分,例如,用户的登录子目录、使用的终端类型等,常用的Shell环境变量如下。
HOME:用于保存注册目录的完全路径名。
PATH:用于保存用冒号分隔的目录路径名。
TERM:终端的类型。
UID:当前用户的识别字,取值是由数位构成的字串。
PWD:当前工作目录的绝对路径名,该变量的取值随cd命令的使用而变化。
使用时加上$,例如echo $HOME
2.内部变量
内部变量是由系统提供的,用户不能修改它们。用户只能根据Shell的定义来使用这些变量,而不能重定义它们。所有预定义变量都是由$符和另一个符号组成的,常用的Shell预定义变量如下。
$#:位置参数的数量。 $*:所有位置参数的内容。
$?:命令执行后返回的状态。 $$:当前进程的进程号。
$!:后台运行的最后一个进程号。 $0:当前执行的进程名。
3.用户变量
用户变量是用户在编写Shell过程中,在Shell程序内任意使用和修改的变量。这是用户根据自己的需要进行定义的,用户可以按照下面的语法规则定义自己的变量:
变量名=变量值
在定义变量时,变量名前不应加符号$,在引用变量的内容时则应在变量名前加$;在给变量赋值时,等号两边一定不能留空格,若变量中本身就包含了空格,则整个字串都要用双引号括起来。
4.位置参数
位置参数是一种在调用Shell程序的命令行中按照各自的位置决定的变量,是在程序名之后输入的参数。位置参数之间用空格分隔,Shell取第一个位置参数替换程序文件中的$1,第二个替换$2,以此类推。$0是一个特殊的变量,它的内容是当前这个Shell程序的文件名,所以,$0不是一个位置参数,在显示当前所有的位置参数时不包括$0。
bash
touch test.sh
vi test.sh #写入echo "$0$1$2$3"
bash test.sh c s h #显示test.shcsh1
2
3
2
3
5.参数置换的变量
Shell提供了参数置换功能,以便用户可以根据不同的条件来给变量赋不同的值。参数置换的变量有4种,它们的语法和功能分别如下。
**变量=${参数-word}:**如果设置了参数,则用参数的值置换变量的值,否则用word置换。
**变量=${参数=word}:**如果设置了参数,则用参数的值置换变量的值,否则把变量设置成word,然后再用word替换参数的值。
**变量=${参数?word}:**如果设置了参数,则用参数的值置换变量的值,否则就显示word并从Shell中退出。
**变量=${参数+word}:**如果设置了参数,则用word置换变量,否则不进行置换。
