5) Other #? 4 The $REPLY is 4. Your proffession is Student. 在上述selectreply.sh脚本的执行结果中,我们注意到输入select命令后,Shell提示符变为\,该提示符由Shell提示符变量PS3进行设置,“#?”是其默认值,可以重新设置。
1.5 位置参数
位置参数(positional parameters)是一种特殊的Shell变量,用于从命令行向Shell脚本传递参数,$1表示第1个参数、$2表示第2个参数等,$0为脚本的名字,从${10}开始,参数号需要用花括号起来,如${10}、${11}、${100}、...。$*和$@一样,表示从$1开始的全部参数。 Shell还定义了一些特殊的位置参数: 特殊位置参数 $# $*和$@ $$ $?
意义 传递到脚本的参数数量 传递到脚本的所有参数 脚本运行的进程号 命令的退出状态,0表示没有错误,非0表示有错误 下面举例说明未知参数的用法,新建一个名为position的脚本,内容如下: #!/bin/sh echo \ echo \ echo \ echo \ echo \ echo \ echo \ echo \ echo \ echo \ echo \ echo \ echo \ position脚本接受命令行的10个参数,然后将$0、$1、$2、...、${10}、$*回显出来。下面给出position脚本的执行结果,从中可以清晰地看出$0、$1、$2、...、${10}、$*等符号的意义:
[root@localhost ~]# . position a bat cat dive eager fair gate hi ideal java The script name is: position Parameter #1: a Parameter #2: bat Parameter #3: cat Parameter #4: dive Parameter #5: eager
Parameter #6: fair Parameter #7: gate Parameter #8: hi Parameter #9: ideal Parameter #10: java -------------------------- All the command line parameters are: a bat cat dive eager fair gate hi ideal java
1.6 变量操作相关命令 1.6.1 source命令
source命令主要用于运行脚本文件。 source命令是bash shell的内置命令。source命令也称为“点命令”,也就是一个点符号(.);点命令,就是个点符号(.),是source的另一名称。 该命令的一般格式为:source FileName 或 . FileName
1.6.2 echo命令
echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。 该命令的一般格式为: echo [参数] 字符串 字符串能加引号,也能不加引号。
1.6.3 readonly命令
readonly命令将变量设置为只读变量。如果使用了readonly命令的话,变量就不可以被修改或清除了。 该命令的一般格式为: readonly variable 示例: $ export TEST=\ # 增加一个环境变量TEST $ readonly TEST # 将环境变量TEST设为只读 $ unset TEST # 会发现此变量不能被删除 -bash: unset: TEST: cannot unset: readonly variable $ TEST=\ # 会发现此也变量不能被修改 -bash: TEST: readonly variable
只执行readonly命令,可以查看系统中所有的只读变量。 当然,用readonly设置变量为只读只是其中的一种方法,我们还可以利用declare和typeset命令实现同样的功能。
1.6.4 set命令和unset命令
set命令可以设置各种Shell选项或者显示当前本地变量。 该命令的一般格式:set [参数] -a 标示已修改的变量,以供输出至环境变量。 -b 使被中止的后台程序立刻回报执行状态。 -C 转向所产生的文件无法覆盖已存在的文件。 -d Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。 -e 若指令传回值不等于0,则立即退出shell。 -f 取消使用通配符。 -h 自动记录函数的所在位置。 -H Shell 可利用\加<指令编号>的方式来执行history中记录的指令。 -k 指令所给的参数都会被视为此指令的环境变量。 -l 记录for循环的变量名称。 -m 使用监视模式。 -n 只读取指令,而不实际执行。 -p 启动优先顺序模式。 -P 启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。 -t 执行完随后的指令,即退出shell。 -u 当执行时使用到未定义过的变量,则显示错误信息。 -v 显示shell所读取的输入值。 -x 执行指令后,会先显示该指令及所下的参数。 不带任何参数的set命令将显示当前环境的所有的变量,包括环境变量和一些非环境变量。 unset命令用来清除变量的值,不管这个变量是环境变量还是本地变量。 该命令的一般格式是:unset变量
1.6.5 export命令
export命令用来设置环境变量。
该命令的一般格式是:export [-fnp] [变量名称]=[变量设置值] -f 代表[变量名称]中为函数名称。
-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。 -p 列出所有的shell赋予程序的环境变量。
1.6.6 env命令和printenv命令
env命令和printenv命令用来显示用户的环境变量。
2 引用 2.1 概念
引用指将字符串用引用符号引起来,以防止特殊字符被Shell脚本重解释为其他意义。 特殊字符是指除了字面意思之外还可以解释为其他意思的字符,如$符号的字面意思就是美圆符号,但是$还表示正则表达式中的行尾,还可进行变量替换。 Shell中定义了四种引用符号: 符号 \' ' ` ` \\
名称 双引号 单引号 反引号 反斜线 意义 引用除美元符号($)、反引号(`)和反斜线之外的所有字符 引用所有的字符 Shell将反引号中的内容解释为系统命令 转义符,屏蔽下一个字符的特殊意义 2.2 全引用和部分引用
双引号引用除美圆符号($)、反引号(`)和反斜线(\\)之外的所有字符,即($)、(`)和(\\)在双引号中仍被解释为特殊意义。利用双引号引用变量能够防止字符串分割,保留变量中的空格。
新建一个名为double.sh的脚本,内容如下: #!/bin/bash variable1=2010 echo \echo $variable1 variable2=\ y z\ #字符之间用多个空格分开 echo \echo $variable2 double.sh脚本定义两个变量:variable1为数字2010,variable2为字符串,字符之间用多个空格分开,对这两个变量分别打印$ variable和“$variable”的值。下面给出double.sh脚本的执行结果,可以看到对于变量值是数字的情况,$ variable1和\的相同;对于由多个空格分开的字符串的情况,\打印出了保留多个空格的字符串,而$ variable2打印出的字符只有一个空格相分割。 单引号引用了所有的字符,即单引号中字符除单引号本身之外都解释为字面意义,单引号不再具备引用变量的功能。因此,我们通常将单引号的引用方式称为全引用,将双引号的引用方式称为部分引用。
2.3 命令替换
命令替换是指将命令的标准输出作为值赋给某个变量,base Shell定义了两种语法进行命令替换,一种是使用反引号,另一种是利用$(),两种等价的语法格式如下: `Linux 命令` $(Linux 命令) 比如,pwd是显示当前工作目录的命令,`pwd`和$(pwd)等价,值都为当前工作目录,与环境变量$PWD的值一样。
2.4 转义
反斜线符号(\\)表示转义,当反斜线后面的一个字符具有特殊意义时,反斜线将屏蔽下一个字符的特殊意义,而以字面意义解析它。特殊字符即包括正则表达式中定义的元字符,也包括Shell重定向、管道命令中的一些特殊字符。 转义字符除了拼版 特殊字符的特殊意义之外,在echo、sed和awk等命令中,转义符加上一些特殊字母能够表达特殊的: 符 号 \\n \\r \\t 意 义 新的一行 返回 表示Tab键
相关推荐: