moc 发表于 2018-11-15 21:39:04

014-Shell编程之02变量和运算符

本帖最后由 moc 于 2018-11-18 12:36 编辑

1、变量
shell中的变量有本地变量,环境变量,变量替换(显示变量),位置变量,标准变量,特殊变量等。
1. 本地变量
本地变量在用户现有shell的生命期的代码中使用。
定义本地变量:    variablename=value
        如: MYVAR=”test”   ==> 注意=左右不要有空格
使用本地变量:$MYVAR   
        如:echo $MYVARORecho ${MYVAR}
显示所有本地变量:set
设置本地变量只读:readonly variablename
        如:readonly MYVAR
注意: 每登录一个终端,都会运行一个shell程序,这个本地变量,就保存在这个shell程序中;如果重新登录,将启动新的shell程序,原来本地变量将消失。
2. 环境变量
环境变量用于所有用户进程。不像本地变量(只用于现在的shell),环境变量可用于所有子进程,这包括编辑器、代码和应用程序。
当前用户的环境变量:   $HOME/.bash_profile
所有用户的环境变量:   /etc/profile
声明环境变量:   export variable
查看当前shell的环境变量:env
3. 变量替换(显示变量)
在变量名前加$,使用echo命令可以显示单个变量取值。
如: echo ${MYVAR} 或者echo $MYVAR

$(variablename)|显示实际值
$(variablename:+value)|若设置了variablename,则显示;否则空
$(variablename:?value)|若未设置variablename,则显示用户自定义信息valude
$(variablename:-value)|若未设置variablename,则显示其值
$(variablename:=value)|若未设置了variablename,则设置其值,并显示

4. 位置变量
位置变量表示$0 $1 $2 $3 …$9;$0 代表bash文件名称 其他就是命令行参数。
#!/bin/bash
# 位置参数
echo "代码的名字 $0"
echo "parm 1: $1“
echo "parm 2: $2"
echo "parm 3: $3
5. 标准变量
bash默认建立了一些标准环境变量,可在/etc/profile中定义.
HOME   ==>家目录, 测试echo $HOME
IFS       ==>linux系统中字符之间的间隔字符
MAIL   ==>当前用户的邮箱路径
TERM    ==>   当前终端的类型
PATH    ==>    shell的标准变量
PS1      ==>    提示符,即终端输入命令时前面的一串字符
PS2      ==>    续行时的提示符,默认为"> "
SHELL==>   当前运行的shell类型
6. 特殊变量
$#        ==> 传递到代码的参数个数
$*        ==> 以一个单字串显示所有向脚步传递的参数,与位置变量不同,次选项参数可以超过9个。
$$        ==> 代码运行的当前进程ID号
$!        ==> 后台运行的最后一个进程的进程ID
$@        ==> 与$#相同,但是使用时加引号,并在引号中返回每个参数
$-        ==> 显示shell使用的当前选项,与set命令功能相同
$?        ==> 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误
#!/bin/bash
# 特殊变量
echo "代码的名字 $0"
echo "parm 1: $1"
echo "parm 2: $2"
echo "parm 3: $3"
echo "显示参数的个数:$#"
echo "显示代码全部参数:$*"
echo "显示前一命令运行后状态:$?"
7. 影响变量的命令
unset variable==>清除变量;测试 echo $testvar
注: readonly的变量,不能被清除。
export   ==>创建环境变量
readonly==>设置变量只读
shift    ==>调整位置变量的位置
2、引号
1. 双引号
        使用双引号可以引用除字符$,`反引号,\反斜杠外的任意字符或者字符串。
如:echo -e " hello world, $SHELL '\n* hiThis 'echo $myvar' "
2. 单引号
让所有的特殊字符都失去意义。
如: echo -e ' hello world, $SHELL '\n* fishC '
3. 单反引号
反引号中的内容将作为一个系统命令,并执行其内容。
如: echo “* fishC.bbs `echo $PATH`”
4. 反斜杠
如果一个字符有特殊含义,反斜杠屏蔽其特殊含义。
含有的特殊字符:$*+^`‘’|?
如: echo * echo \*
3、运算符
1. 按位运算符
~op1   ==> 反运算符
op1<<op2   ==> 左移运算符
op1>>op2   ==> 右移运算符
op1 & op2   ==> 与比较运算符
op1 ^ op2   ==> 异或运算符
op1 | op2    ==>或运算符
如:echo $
注:$[ ] 表示形式告诉shell对方括号中的表达式求值。
2. 逻辑运算符
&&==> 逻辑与运算
||    ==> 逻辑或运算符
如: echo $
3. 算术运算符
+, -, ×, /, %
如:echo $
3. 赋值运算符
=,+=,-=,*=,/=,%=,&=,^=、|=,<<=,>>=
如: let myvar+=myvar
4、表达式替换
$[表达式]或$((表达式))
所有shell的求值都是用整数完成。
$[]可以接受不同基数的数字 ==>                 n表示基数从2到36任意基数.
如: $ echo $
页: [1]
查看完整版本: 014-Shell编程之02变量和运算符