郴州网站建设公司平台,权威的网络营销,搭建合作平台,山东省住房建设厅网站考试项目一、变量
1、定义变量不加$符号#xff0c;使用变量要用$#xff1b;等号两边不能直接接空格符#xff1b;通常大写字符为系统默认变量#xff0c;自行设定变量可以使用小写字符。
2、双引号内的特殊字符如 $ 等#xff0c;可以保有其符号代表的特性#xff0c;即可以有…一、变量
1、定义变量不加$符号使用变量要用$等号两边不能直接接空格符通常大写字符为系统默认变量自行设定变量可以使用小写字符。
2、双引号内的特殊字符如 $ 等可以保有其符号代表的特性即可以有变量、转移字符单引号内的特殊字符则只会原样输出。
NAMEyanzu;your_namewu$NAME;echo $your_name # wuyanzu
NAMEtingfeng;your_namexie$NAME;echo $your_name # xie$NAME3、在一串指令的执行中还需要藉由其他额外的指令所提供的信息时可以使用反单引号 指令 或 $(指令)。
# uname -r 作为系统命令并执行其内容
version$(uname -r);echo $version
versionuname -r;echo $version4、欲为扩增变量内容时则可用 $变量名称 或 ${变量} 累加内容。
PATH$PATH:/home/bin # 字符串就是这样拼接的
PATH${PATH}:/home/bin5、若该变量需要在其他子程序执行则需要以 export 来使变量变成环境变量。
export PATH
env # 可查看环境变量6、使用readonly可以将变量定义为只读变量只读变量就是一个常量。unset 命令可以删除变量变量被删除后不能再次使用不能删除只读变量。
namewuyanzu
readonly name # 指定name为只读变量
age13
unset age # 后面不能再使用age7、预设变量开始执行Script脚本时就会设定且不能被修改。
$# #传递到脚本的参数的数量
$* #表示所有位置参数的内容即以一个字符串显示所有向脚本传递的参数$* 以$1 $2 … $n的形式输出所有参数
$ #与$*相同$以$1 $2 … $n的形式输出所有参数
$$ #当前进程的进程号PID
$? #上个执行指令的回传值用于检查上一条指令执行是否正确linux执行返回的状态值0表示没有错误其他任何值表明有错误
$! #后台运行的最后一个进程的进程号pid二、字符串
字符串可以用单引号也可以用双引号也可以不用引号。 字符串常用操作拼接、获取长度、提取/替换子串、查找字符。
#!/bin/bash
your_namewuyanzu# 单引号拼接
echo hello, $your_name #hello, wuyanzu
echo hello, ${your_name} #hello, wuyanzu# 双引号拼接除单引号方式外加以下方式
echo hello, $your_name #hello, wuyanzu
echo hello, ${your_name} #hello, wuyanzu# 获取长度
echo ${#your_name} #7
expr length $your_name# 查找字符位置
expr index $your_name u #查找u第一次出现的位置没有就是0输出2
expr index $your_name yu #查找y和u第一次出现的位置谁先出现算谁输出2# 提取子串
echo ${your_name:2} #从索引2开始至结尾。输出yanzu
echo ${your_name:2:3} #从索引2开始取3个字符。输出yan
expr substr $your_name 2 3 #从第二个字符开始取3个。输出uya# 匹配删除子串
echo ${your_name#wu} #从头开始匹配最短的wu将其删除后。输出yanzu
echo ${your_name##wu} #从头开始匹配最长的wu将其删除后。输出yanzu
echo ${your_name%wu} #从尾开始匹配最短的yanzu将其删除后。输出wu
echo ${your_name%%wu} #从头开始匹配最长的yanzu将其删除后。输出wu# 替换子串
echo ${your_name/u/o} #使用u替换从头开始第一个匹配的o输出woyanzu
echo ${your_name//u/o} #使用u替换匹配到的所有o输出woyanzo三、数组
Bash Shell 只支持一维数组不支持多维数组初始化时不需要定义数组大小数组元素的下标由 0 开始。
Shell 数组用括号来表示元素用空格符号分割开。
#!/bin/bash# 定义一个数组
your_name(w u yan zu)your_name[4]!# 获取指定元素
echo ${your_name[2]} #获取第2个元素输出yan# 获取数组长度
echo ${#your_name[*]} # 5
echo ${#your_name[*]}# 获取所有元素
echo ${your_name[*]} # w u yan zu !
echo ${your_name[]}# 关联数组
declare -A name([my_name]wuyanzu [your_name]pengyuyan)
name[his_name]panchangjiangecho ${name[my_name]} # wuyanzu
echo ${#name[*]} # 3
echo ${name[*]} # pengyuyan wuyanzu panchangjiang四、基本运算符
原生bash不支持简单的数学运算但是可以通过其他命令来实现例如 awk 和 exprexpr 最常用。有以下两个要注意的点
对于所有的运算符表达式和运算符之间要有空格例如22是不对的必须写成2 2。条件表达式要放在方括号之间并且要有空格例如: [$a $b]是错误的必须写成 [ $a $b ]。
4.1 算数、字符串运算符
乘号*前边必须加反斜杠\才能实现乘法运算。
# 算数运算符
expr $a $b # ab
expr $a - $b # a-b
expr $a \* $b # a*b
expr $b / $a # a/b
expr $b % $a # a%b
a$b # 把变量b的值赋给a
[ $a $b ] # a是否等于b
[ $a ! $b ] # a是否等于b# 字符串运算符
[ $a $b ] #检测两个字符串是否相等相等返回 true
[ $a ! $b ] #检测两个字符串是否不相等不相等返回 true
[ -z $a ] #检测字符串长度是否为0为0返回 true
[ -n $a ] #检测字符串长度是否不为 0不为 0 返回 true
[ $a ] #检测字符串是否不为空不为空返回 true4.2 关系、布尔、逻辑运算符
关系运算符只支持数字不支持字符串除非字符串的值是数字。
# 关系运算符
[ $a -eq $b ] # a b
[ $a -ne $b ] # a ! b
[ $a -gt $b ] # a b
[ $a -lt $b ] # a b
[ $a -ge $b ] # a b
[ $a -le $b ] # a b# 布尔运算符
[ $a -lt 20 -a $b -gt 100 ] # -a:与
[ $a -lt 20 -o $b -gt 100 ] # -o:或
[ ! false ] # 非# 逻辑运算符
[[ $a -lt 100 $b -gt 100 ]] # 逻辑AND
[[ $a -lt 100 || $b -gt 100 ]] # 逻辑OR4.3 文件测试运算符
文件测试运算符用于检测 Unix 文件的各种属性。
[ -b $file ] # 检测文件是否是块设备文件如果是则返回 true
[ -c $file ] # 检测文件是否是字符设备文件如果是则返回 true
[ -d $file ] # 检测文件是否是目录如果是则返回 true
[ -f $file ] # 检测文件是否是普通文件既不是目录也不是设备文件如果是则返回 true
[ -g $file ] # 检测文件是否设置了 SGID 位如果是则返回 true
[ -k $file ] # 检测文件是否设置了粘着位(Sticky Bit)如果是则返回 true
[ -p $file ] # 检测文件是否是有名管道如果是则返回 true
[ -u $file ] # 检测文件是否设置了 SUID 位如果是则返回 true
[ -r $file ] # 检测文件是否可读如果是则返回 true
[ -w $file ] # 检测文件是否可写如果是则返回 true
[ -x $file ] # 检测文件是否可执行如果是则返回 true
[ -s $file ] # 检测文件是否为空文件大小是否大于0不为空返回 true
[ -e $file ] # 检测文件包括目录是否存在如果是则返回 true4.4 test 命令
test 命令用于检查某个条件是否成立它可以进行数值、字符和文件三个方面的测试。
具体的条件关系、布尔、逻辑、以及文件测试可参考以上基本运算符。
cd /bin
if test -e ./notFile -o -e ./bash
thenecho -e 至少有一个文件存在!\n # -e可输出转移字符
elseecho -e 两个文件都不存在!\n
fi五、控制流
5.1 条件语句
知道if...elif...else的写法其他的就都会写了。
if condition1
thencommand1
elif condition2
then command2
elsecommandN
fi5.2 循环语句
在循环中也可以使用break和continue。
for var in item1 item2 ... itemN; do command1; command2… done;while condition
docommand
doneuntil condition
docommand
done5.3 分支语句
case取值后面必须为单词 in每一模式必须以右括号结束。
取值可以为变量或常数匹配发现取值符合某一模式后其间所有命令开始执行直至 ;;。
read aNum
case $aNum in1) echo 你选择了 1;;2) echo 你选择了 2;;
esac六、函数
定义函数function关键字可选不带任何参数所有函数在使用前必须定义。
函数的返回值只能是一个介于 0~255的值在调用该函数后通过 $? 来获得参考预设变量。
# 函数定义可以不用function
function demo(){echo 第一个参数为 $1echo 第二个参数为 $2echo 参数总数有 $# 个echo 作为一个字符串输出所有参数 $*return 8
}
# 函数调用
demo 1 2 3 4 5 6 7
echo demo 返回值为 $?七、常用技巧
7.1 程序出错中断整个脚本
linux所有命令执行返回的状态值0表示没有错误其他任何值表明有错误。
如果只检擦某一条指令的返回状态是否正确可以使用下面的方式。
if[ $? -ne 0 ]thenreturn $?
fi如果要检查shell脚本中的每一条指令的返回 状态则可以用下面的方式。
set -e # 程序中任意一条命令返回非0的值终端shell程序