Shell基础变量

2019-06-24  本文已影响0人  冬月廿拾

变量的定义及使用

变量定义类似于python
shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串

a="home" 
b=asdads 
c=112 
array=(1 2 3) #数组

d="hello world" #带空格需要使用单引号或双引号
e="$a"  #双引号会转义
f='${a}'   #单引号不会

###变量的使用
echo $e && echo $f
-->home 
-->${a}
echo `ls`  #输出ls执行的结果

预定义变量

echo $PATH #输出path变量
echo $PWD #输出pwd的执行结果
echo $RANDOM #随机整数
$? #最后一次执行的命令返回状态,0为成功,非0为失败
$$ #当前进程的进程号
$! #后台运行的最后一个进程的进程号

数字变量的操作

i=1
((i=i+1))  #i=2
((i+=1))  #i=3
((i=i/2))  #i=3/2=1  #不会产生小数
awk 'BEGIN{print 1/3}'  #小数运算
awk 'BEGIN{printf("%.2f\n", 1/3)}'    #格式化,保留2位小数

字符串操作

a=12345
echo ${a:4}  #获取指定位置的字符从0开始
-->5

{value:offset:length} 从变量中提取子串{#value} 字符串长度

掐头去尾与内容替换

${value#pattern} ${value##pattern} #表示掐头 
${value%pattern} ${value%%pattern} %表示去尾 
${value/pattern/string} 
${value//pattern/string} /表示替换 
#与## %与%% /与//的区别:最短匹配模式VS最长匹配模式 
${var/#Pattern/Replacement} ${var/%Pattern/Replacement}
b=asdasd
echo ${b#as}  #dasd
echo ${b##*as}  #d
echo ${b%as*}  #asd
echo ${b%%as*}  #
echo ${b/a/A}  #Asdasd

echo $b | awk '{print substr($0,2,3)}'   #sda
echo $b|sed 's#a#A#g'  #AsdAsd

布尔变量

判断的类型

算术判断

[ string1 = string2 ] 如果两字符串相同,则结果为真
[ string1 != string2 ] 如果两字符串不相同,则结果为真
[ -n $var ] 如果字符串不是空,则结果为
[ -z $var ] 如果字符串是空,则结果为真
[[ "xxxx" == x* ]] 在表达式中表示0或者多个字符
[[ xxx == x?? ]] 在表达式中表示单个字符

字符串比较

a=asd
b=qwe
if [ $a = $b ];then echo true;else echo false;fi   #判断相等
false
if [ $a != $b ];then echo true;else echo false;fi  #判断不等
true
if [ -z $b ];then echo true;else echo false;fi  #判断非空
false
if [[ "xxx" == x* ]];then echo true;else echo false;fi  #判断x开始的0或多个字符
true
if [[ "xxx" == x?? ]];then echo true;else echo false;fi  #判断x开始后面还有两个字符
true
if [[ "xxx" == x??? ]];then echo true;else echo false;fi
false

逻辑判断

[ 2 -ge 1 -a 3 -ge 4 ];echo $? #与
 [ 2 -ge 1 -o 3 -ge 4 ];echo $? #或
[[ 2 -ge 1 && 3 -ge 4 ]];echo $? #与 
[[ 2 -ge 1 || 3 -ge 4 ]];echo $? #或
[ ! 2 -ge 1 ];echo $? #非

内置判断

-e file 如果文件存在,则结果为真
-d file 如果文件是一个子目录,则结果为真
-f file 如果文件是一个普通文件,则结果为真
-r file 如果文件可读,则结果为真
-s file 如果文件的长度不为0,则结果为真
-w file 如果文件可写,则结果为真
-x file 如果文件可执行,则结果为真

数组变量

a=(1 2 3 45 6)
echo ${a[*]}  #输出为字符串
1 2 3 45 6
for i in "${a[@]}";do echo $i;done  输出为数组
1
2
3
45
6
for i in "${a[*]}";do echo $i;done  #输出为字符串
1 2 3 45 6
上一篇下一篇

猜你喜欢

热点阅读