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} 字符串长度
掐头去尾与内容替换
${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
布尔变量
- true
- false
- 命令执行返回值 $?
1.任何命令执行都会有一个返回值 0表示正确
2.非0表示错误
判断的类型
- 算术判断
- 字符串判断
- 逻辑判断
- shell内置判断
算术判断
- [ 2 –eq 2 ] 相等
- [ 2 –ne 2 ] 不等
- [ 3 –gt 1 ] 大于
- [ 3 –ge 3 ] 大于等于 [ 3 –lt 4 ] 小于
- [ 3 –le 3 ] 小于等于 (())也可以表示算术比较。((10>=8)) ,((10==10))
[ 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