1 变量
1.1脚本参数
示例:
脚本:
#!bin/bash #参数示例 echo "************************************************************" echo "This is $# ,value $# (参数个数)" echo "This is $* ,value $* (所有传参)" echo "This is $1 ,value $1 (传参1)" echo "This is $2 ,value $2 (传参2)" echo "This is $$ ,value $$ (脚本运行的当前进程ID)" echo "This is $! ,value $! (后台最后一个进程ID号)" echo "This is $@ ,value $@ (与$*相同,使用需要加引号)" echo "This is $? ,value $? (显示最后命令执行状态,0为没有错误" echo "************************************************************"
结果
Tips: 脚本中如何获取绝对路径?
答:
#!bin/bash #获取当前脚本绝对路径 BASE_PATH=$(cd `dirname $0`; pwd); echo "$(cd \`dirname $0\`; pwd)" $BASE_PATH #dirname $0,取得当前执行的脚本文件的父目录 #cd `dirname $0`,进入这个目录(切换当前工作目录) #pwd,显示当前工作目录(cd执行后的)
1.2 shell中命令替换、变量子串、数学加减符号使用
1.2.1 命令替换 ` ` 和 $( )
说明: ` ` (反引号)和 $( )来作命令替换。先完成符号内的命令行,再将其结果替换出来。
区别:` `更通用,$()部分系统不支持
示例:
#!bin/bash echo $(pwd) echo `ls -l`
执行结果
1.2.2 变量子串 ${}
变量截取:
# 是左边开始
% 是去掉右边
单一符号(#或%)是最小匹配;两个符号是最大匹配(##或%%)
*是用来匹配不要的字符,也就是想要去掉的那部分
还有指定字符分隔号,与*配合决定取哪部分
示例:
#!bin/bash echo "***********去掉从左边数第一个.左边的**************" values=left.right.last echo "原始值 $values ,${values#*.} 修改后" ${values#*.} echo "*************************************************" echo "***********去掉从右边数第一个.右边的**************" echo "原始值 $values ,${values%.*} 修改后" ${values%.*} echo "*************************************************" value2=one.two.last echo "***********去掉从左边数最后一个.左边的***********" echo "原始值 $value2 ,${value2##*.} 修改后" ${value2##*.} echo "*************************************************" echo "***********去掉从右边数最后一个.右边的************" echo "原始值 $value2 ,${value2%%.*} 修改后" ${value2%%.*} echo "*************************************************"
运行结果
取子串及替换
${value:start:len} 取value从start开始长为len的值
${value/val1/val2} 将第一个val1换为val2
${value//val1/val2} 将所有val1换为val2
${#value} 获取变量长度
示例:
#!bin/bash values=left.right.last echo "******************截取开头4位********************" echo "原始值 $values ,${values:0:4} 修改后" ${values:0:4} echo "*************************************************" echo "******************替换第一个.为|**************" echo "原始值 $values ,${values/./|} 修改后" ${values/./|} echo "*************************************************" e*-
cho "******************替换所有.为|**************" echo "原始值 $values ,${values//./|} 修改后" ${values//./|} echo "*************************************************"
结果:
根据状态为变量赋值
命令 | 解释 | 备注 |
---|---|---|
${file-my.file.txt} | 若 $file 没设定,则使用 my.file.txt 作传回值 | 空值及非空值不作处理 |
${file:-my.file.txt} | 若 $file 没有设定或为空值,则使用 my.file.txt 作传回值 | 非空值时不作处理 |
${file+my.file.txt} | 若$file 设为空值或非空值,均使用my.file.txt作传回值 | 没设定时不作处理 |
${file:+my.file.txt} | 若 $file 为非空值,则使用 my.file.txt 作传回值 | 没设定及空值不作处理 |
${file=txt} | 若 $file 没设定,则回传 txt ,并将 $file 赋值为 txt | 空值及非空值不作处理 |
${file:=txt} | 若 $file 没设定或空值,则回传 txt ,将 $file 赋值为txt | 非空值时不作处理 |
${file?my.file.txt} | 若 $file 没设定,则将 my.file.txt 输出至 STDERR | 空值及非空值不作处理 |
${file:?my.file.txt} | 若 $file没设定或空值,则将my.file.txt输出至STDERR | 非空值时不作处理 |
1.2.3 $(( ))与整数运算
1)在(())中可使用数学+-*/符号
2)$(( ))可以将其他进制转成十进制数显示出来。
示例:
[root@localhost ~]# echo $((2#110)) 6 [root@localhost ~]# echo $((16#2a)) 42 [root@localhost ~]# echo $((8#11)) 9