• Linux与unix shell编程指南


    第14章 环境和shell变量

    1、使用变量时,尽量用花括号将之括起来,防止shell误解变量值。

     

    2、设置变量时的不同模式

    variable-name=value 设置实际值到variable-name
    variable-name+value 如果设置了variable-name,则重设其值
    variable-name:?value 如果未设置variable-name,显示未定义用户错误信息
    variable-name?value 如果未设置variable-name,显示系统错误信息
    variable-name:=value 如果未设置variable-name,设置其值
    variable-name:-value 同上,但是取值并不设置到variable-name,可以被替换

     

    3、使用unset命令清除设置,如:

    	~$ PC=enterprise
    	~$ echo ${PC}
    	enterprise
    	~$ unset PC
    	~$ echo ${PC}

     

    4、使用set命令显示所有本地shell变量。

     

    5、将变量并排可以使变量结合在一起:

    	echo ${variable-name}${variable-name}...

    如:

    	~$ FIRST="Bruce "
    	~$ SURNAME="Willis"
    	~$ echo ${FIRST}${SURNAME}
    	Bruce Willis

     

    6、有时要测试是否已经设置或初始化变量。如果未设置或初始化,就可以使用另一个值。此命令格式为:

    	${variable:-value}

    如:

    	~$ COLOR="blue"
    	~$ echo "The sky is ${COLOR:-gray} today"
    	The sky is blue today
    	~$ 
    	~$ unset COLOR
    	~$ echo "The sky is ${COLOR:-gray} today"
    	The sky is gray today

     

    上面的例子并没有将实际值传给变量,需使用下述命令完成此功能:

    	${variable:=value}

    如:

    	~$ echo ${COLOR}
    
    	~$ echo "The sky is ${COLOR:=gray} today"
    	The sky is gray today
    	~$ echo ${COLOR}
    	gray

     

    7、测试变量是否取值,然后返回带有系统错误信息的结果,如下面例子测试变量file是否取值:

    	~$ echo "The file is ${FILE:?}"
    	-bash: FILE: 参数为空或未设置

     

    以上结果可读性不好,但是可以加入自己的脚本以增加可读性。如:

    	~$ echo "The file is ${FILE:?" sorry cannot locate the variable files"}"
    	-bash: FILE:  sorry cannot locate the variable files

     

    8、设置只读变量,格式如下:

    	variable-name=value
    	readonly variable-name

    如:

    	~$ TYPE_DEV="/dev/rmt/0n"
    	~$ echo ${TYPE_DEV}
    	/dev/rmt/0n
    	~$ readonly TYPE_DEV
    	~$ TYPE_DEV="/dev/rmt/1n"
    	-bash: TYPE_DEV: 只读变量

    要查看所有只读变量,使用命令readonly即可。

     

    9、环境变量

    环境变量用于所有用户进程(经常称为子进程)。登录进程称为父进程。shell中执行的用户进程均称为子进程。不像本地变量(只用于现在的shell)环境变量可用于所有子进程,包括编辑器、脚本和应用。

    所有环境变量均为大写,环境变量应用于用户和进程前,必须用export命令导出。格式如下:

    	VARIABLE_NAME=value;export VARIABLE_NAME

    	VARIABLE_NAME=value
    	export VARIABLE_NAME

    使用env命令可以查看所有的环境变量。

     

    10、位置变量参数

    如果要向一个shell脚本传递信息,可以使用位置参数完成此功能,。参数相关数目传入脚本,此数目可以任意多,单只有前9个可以被访问,使用shift命令可以改变这个限制。

    如果向脚本传递Did You See The Full Moon信息,下面的表格讲解了如何访问每一个参数:

    $0 $1 $2 $3 $4 $5 $6 $7 $8 $9
    <> Did You See The Full Moon

     

    11、特定变量参数

    $# 传递到脚本的参数个数
    $* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个
    $$ 脚本运行的当前进程ID
    $! 后台运行的最后一个进程的进程ID号
    $@ 与$#相同,但是使用时加引号,并在引号中返回每个参数
    $- 显示shell使用的当前选项,与set命令功能相同
    $? 显示最后命令的退出状态,0表示没有错误,其他任何值表明有错误

    第15章 引号

    1、反引号

    反引号用于设置系统命令的输出到变量。

    下面的例子中,如:

    	~$ echo `date`
    	2014年 04月 11日 星期五 16:03:13 CST

     

    2、反斜线

    如果下一个字符有特殊含义,反斜线防止shell误解其含义,即屏蔽其特殊含义。下述字符包含有特殊意义:&*+^$`"|?。如:

    	~$ echo $$
    	1830
    	~$ echo $$
    	$$

    第17章 条件测试

    对文件、字符串和数字使用test命令;

    对数字和字符串使用expr命令。

    expr命令和执行数值输出。使用最后退出状态命令$?可测知test和expr,二者均以0表示正确,1表示返回错误。

     

    1、测试文件状态

    test一般有两种格式,即:

    test condition

    [condition]

    使用方括号时,要注意在条件两边加上空格。

    常用条件表达式:

    -d 目录
    -f 正规文件
    -L 符号链接
    -r 可读
    -s 文件长度大于0、非空
    -w 可写
    -u 文件有suid位设置
    -x 可执行

    如:

    	~/tools$ ls -l a.vim 
    	-rw------- 1 xxx xxx 31424 11月  3 09:17 a.vim
    	~/tools$ [ -w a.vim ]
    	~/tools$ echo $?
    	0
    	~/tools$ test -w a.vim 
    	~/tools$ echo $?
    	0
    	~/tools$ [ -x a.vim ]
    	~/tools$ echo $?
    	1

     

    2、测试时使用逻辑操作符

    有时比较两个文件状态,shell提供三个逻辑操作完成此功能:

    -a 逻辑与
    -o 逻辑或
    ! 逻辑否

    如:

    	~/tools$ ls -l a.vim grep.vim 
    	-rw------- 1 xxx xxx 31424 11月  3 09:17 a.vim
    	-rw------- 1 xxx xxx 32997 11月  3 10:42 grep.vim
    	~/tools$ [ -w a.vim -a -w grep.vim ]
    	~/tools$ echo $?
    	0
    	~/tools$ [ -w a.vim -a -x grep.vim ]
    	~/tools$ echo $?
    	1

     

    3、字符串测试

    有5种格式:

    test "string"

    test string_operator "string"

    test "string" string_operator "string"

    [ string_operator string ]

    [ string string_operator string ]

    string_operator可为

    = 两个字符串相等
    != 两个字符串不等
    -z 空串
    -n 非空串

    如:

    	~/tools$ [ -z $VARIABLE_NAME ]
    	~/tools$ echo $?
    	0
    	~/tools$ VARIABLE_NAME="name"
    	~/tools$ [ -z $VARIABLE_NAME ]
    	~/tools$ echo $?
    	1

     

    4、测试数值

    一般格式如下:

    "number" numeric_operator "number"

    [ "number" numeric_operator "number" ]

    numberic_operator可为:

    -eq 相等
    -ne 不相等
    -gt 第一个数大于第二个数
    -lt 第一个数小于第二个数
    -ge 第一个数大于或等于第二个数
    -le 第一个数小于或等于第二个数

    如:

    	:~/tools$ NUMBER=130
    	:~/tools$ [ "$NUMBER" -eq "130" ]
    	:~/tools$ echo $?
    	0

    可以使用逻辑操作符将两个测试表达式结合起来,只能在一对方括号中使用,如:

    	:~/tools$ [ "990" -le "995" -a "123" -gt "33" ]
    	:~/tools$ echo $?
    	0
    	:~/tools$ [ "990" -le "995" -a "123" -gt "133" ]
    	:~/tools$ echo $?
    	1

     

    5、expr用法

    一般用于整数值,但也可用于字符串,一般格式如下:

    expr argument operator argument

    如:

    	:~/tools$ expr 10 + 10
    	20

    使用乘号时,必须用反斜线屏蔽其特定含义,如:

    	:~/tools$ expr 30 * 30
    	expr: 语法错误
    	:~/tools$ expr 30 * 30
    	900

     

    expr在循环中用于增量计算,如:

    	:~/tools$ LOOP=0
    	:~/tools$ `expr $LOOP + 1`

     

    expr也有模式匹配功能,可以使用expr通过指定冒号选项计算字符串中字符数。.*意即任意字符串重复0次或多次,如:

    	:~/tools$ VALUE=account.doc
    	:~/tools$ expr $VALUE : '.*'
    	11

     

    在expr中可以使用字符串匹配操作,这里使用模式.doc抽取文件附属名:

    	:~/tools$ expr $VALUE : '(.*).doc'
    	account
  • 相关阅读:
    vss的ss.ini丢失或损坏导致的vss无法登录错误
    NHibernate各种数据库连接参数文件配置方法说明
    oracle操作语句
    企业微信群聊机器人发送本地图片
    securecrt 或xshell 转发80端口
    SecureCRT 或 XSHELL 转发 X11 图形化GUI
    Windows 创建 .gdbinit 提示必须键入文件名
    vscode C++ 程序 windows
    vscode C++ 程序 windows
    解决source insight 4.0 不识别.cc文件的问题
  • 原文地址:https://www.cnblogs.com/sheshiji/p/3658242.html
Copyright © 2020-2023  润新知