一。变量
1.本地变量
本地变量在用户现在的Shell生命期的脚本中使用
variable-name=value
set显示本地所有的变量
readonly variable-name
LOCALTEST="test"
echo $LOCALTEST
set
readonly LOCALTEST
LOCALTEST="TEST1"错误,不可再赋值,只读
readonly
2,环境变量
环境变量用于所有用户进程(经常称为子进程)。登录进程称为父进程。Shell中执行的用户进程均为子进程。不像本地变量(只用于现在的Shell)环境变量可用于所有子进程,这包括编辑器,脚本和应用
$HOME/.bash_profile(/etc/profile)
export
env
cat /etc/profile
export var="test"
env
export
readonly var
3.变量替换
用变量的值替换它的名字
echo
在变量名前加$,使用echo命令可以显示单个变量的值
testvar="teest"
echo $testvar
${variable name}显示实际值到variable name
${variable name:+value}如果设置了variable name,则显示其值value,否则为空
${variable name:?value}如果未设置variable name,显示用户定义错误信息value
${variable name:-value}如果未设置variable name,则显示其值value
${variable name:=value}如果未设置variable name,设置其值并显示
4.变量清除
unset
unset variable name
5.位置变量
位置变量表示$0 :脚本名字
$1:脚本的第一个参数
....
$9:脚本的第9个参数
向脚本中使用位置参数
向系统命令传递参数
6.标准变量
bash默认建立了一些标准环境变量,可在/etc/profile中定义
EXINIT HOME IFS LOGNAME MAIL MAILCHECK MAILPATH PATH PS1 PS2 SHELL TERMINFO TERM TZ EDITOR PWD MANPATH
7。特殊变量
$#(传递到脚本的参数列表)
$*(以一个单字符串显示所有向脚本传递的参数,与位置变量不同,此选项参数可超过9个)
$$(脚本运行的当前进程ID号)
$@(与$*相同,但是使用时加引号,并在引号中返回每个参数)
$-(显示Shell使用的当前选项,与set命令功能相同)
$?(显示最后命令的退出状态。0表示没有错误,其他任何值表示有错误)
8.影响变量的命令
(1)declare 设置或显示变量
-f直线式函数名
-r创建制度变量(declare和typeset)
-x创建转出变量
-i创建整数变量
使用+替代——,可以颠倒选项的含义
(2)export 用于创建传给子Shell的变量
--表明选项结束,所有后续参数都是实数
-f表明“名-值”对中的名字是函数名
-n把全局变量转换成局部变量。换句话说,命令的变量不再传给Shell
-p显示全局变量列表
(3)readonly
用于显示或设置只读变量
--表明选项结束
-f创建只读变量
(4)set
设置或重设各种Shell
(5)shift[n]
用于移动位置变量,调整位置变量,使$3得值赋予$2,$2的值付给$1
(6)typeset
用于显示或设置变量
是declare的同义词
(7)unset
用于取消变量的定义
--表明选项结束
-删除只读变量,但不能取消从Shell环境中删除指定的变量和函数,如PATH,PS1,PS2,PPID,UID,EUID等的设置
二。引号
引号的必要性:变量和替换操作,在脚本中执行变量替换时最容易犯得一个错误就是引用错误
echo ert*
echo "ert *"
1.双引号
使用双引号可引用除$,`,\外的任意字符或字符串
echo -e "ert,$SHELL '\n*china`echo itlab`"
ert,/bin/bash'
* chinaitlab
2.单引号
单引号与双引号类似,不同的是Shell会忽略任何引用值。换句话说,如果屏蔽了其特殊含义,会将引号里的所有字符,包括引号都作为一个字符串
echo -e ‘ert,$SHELL '\n*china`echo itlab`’
ert,$SHELL *china `echo itlab`
3.反引号
反引号用于设置系统命令的输出到变量,Shell将反引号中的内容作为一个系统命令,并执行其内容
echo "*china`echo itlab`"
*chinaitlab
4.反斜杠
如果一个字符有特殊含义,反斜杠防止Shell误解其含义,即屏蔽其特殊含义
下术字符包含特殊含义:& * + …… ` $ '' | ?
echo * ...
echo \* *
三。运算符
运算符是对计算机发的指令
运算对象:数字、字符(字面值) 变量 表达式
表达式:运算符和运算对象的组合体
1.运算符类型
(1)按位运算符
~op1 反运算符,把op1取反
op1<
op1>>op2右移运算符,把op1右移op2位
op1&op2与比较运算符
op1^op2异或运算符
op1||op2或运算符
逻辑运算符
&&与运算符
||或运算符
<>,==,!=
赋值运算符
= += -= *= /= %= &= ^= |= <<= >>=
let $count=$count+$change
let $count+=$change
(2)$[]表示形式告诉Shell对方括号中的表达式求值
$[ 3+4 ]
2.表达式替换
(1)$[]和$(())
习惯使用$[],所有Shell的求值都是用整数完成
(2)$[]可以接受不同基数的数字
[base #n]n表示基数从2到36的任何基数
echo $[ 10#8+1 ]
9
3.运算符的优先级
正负号(-,+) !,~ *,/,% +, - <<,>> <=,》=,<,> ==,!= &,^,| &&,|| =,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=
阅读(676) | 评论(0) | 转发(0) |