shell学习笔记

来源:互联网 发布:知乎 it桔子 编辑:程序博客网 时间:2024/06/11 10:01

单撇号



用命令的执行结果来替换这个字符串本身
例1:
#now=‘date’
#echo $now
#now=`date` 
#echo $now

例2:
#count=10
#count=`expr$count + 1`

#echo $count


注意: 反撇号与单引号的区别

expr

expr命令一般用于整数值,但也可用于字符串。一般格式为:
expr argument operator argument
expr也是一个手工命令行计数器。


$expr 10 + 10
20
$expr 1500 + 900
2500
$expr 30 / 3
10
$expr 30 / 3 / 2
5


(注意运算符左右都有空格 ,如果没有空格表示是字符串连接)

使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义。


变量



 name=string
赋值号“=”两边不允许有空白符;
nodehost="beijing.UUCP beijing.UUCP”
path=/bin:/usr/bin:/etc/bin
count=10
)允许多个赋值操作,按从右到左的顺序进行

#A=$BB= A=$BB=abc C="OK"
# echo $A $B $C
abcabcOK

)当引用一个未设置的变量时,其隐含值为空

#echo "$mail is path of mailbox”
is path of mailbox is path of mailbox

用户自定义变量(双引号)
)如果用双引号“”将值括起来,则括起来的字符串允许出现空格、
制表符和换行符的特殊字符,而且允许有变量替换

# MAIL=/ MAIL=/var/mail/fk
#var="$MAIL is a path of mailbox"
#echo $var
```r/mail/fkis a path of mailbox


例2:

#str="This is \n a book"
#echo $str
This is
a book a book


用户自定义变量(单引号)
)如果用单引号‘’将值括起来,则括起来的字符串允许出现空格、

制表符和换行符的特殊字符,但不允许有变量

例1

#BOOK="English book"
# MSG='$BOOK'
#echo $MSG echo $MSG

例2 
 #msg='Today is  ='Today is \t Sund
 # echo $msgay is Sunday

shift命令(处理不定长参数)

‹使用shift可以将命令行位置参数依次移动位置,即$2->$1, $3->$2. 在移位之前的第一个位置参数$1在移位后将不在存在
‹使用shift时,每进行一次移位,$#减1,使用这一特性可以用until
循环对每个参数进行处理
‹使用shift的另一个原因是Bourne Shell的位置参数变量为$1~$9, 
因此通过位置变量只能访问前9个参数。但这并不等于在命令行上
最多只能输入9个参数。此时如果想访问前9个参数之后的参数,就
必须使用shift
‹shift后可加整数进行一次多个移位,如:shift 3


用户自定义变量(大括号)

 引用变量的值时,可以用花括号{}将变量名称括起来,使变量名称
与它的后续字符分隔开,如果紧跟在变量名称后面的字符是字母、数
字或下划线时,必须要使用花括号
例:

#str='This is a string'
#echo "${str}enttest of variables"s is a stringent test of variables
#echo "$strenttest of variables"
test of variables

变量替换格式


${var:-value} 如果变量var为非空值则用变量var的值,如果变量var为空值,则用value的值。

例:
testvar1=jiayou
echo ${testvar1:-success} #当testvar1有非空值的时候,打印出testvar1的值
testvar2=
echo ${testvar2:-success} #当testvar2为空值得时候,打印出字符串success
echo ${testvar3:-success} #当testvar3未定义时,其值为空,打印出字符串success
testvar4=cheer

echo ${testvar3:-$testvar4} #当testvar3未定义为空值时,打印出变量testvar4的值,说明value的值可以是字符串也可以是变量

执行结果

jiayou
success
success
cheer

${var:+value} 如果变量var为非空值时,也是用value的值,如果变量var为空值时,则取空值。

例:

testvar1=jiayou
echo ${testvar1:+success} #当变量testvar1的值非空时,用字符串success
testvar2=
echo ${testvar2:+success} #当变量testvar2的值为空时,用空字符串
echo ${testvar3:+success} #当变量testvar3的值为空时,用空字符串
testvar4=cheer
echo ${testvar3:+$testvar4} #当变量testvar3的值为空时,用空字符串
testvar4=cheer
echo ${testvar1:+$testvar4}     #当变量testvar1的值非空时,用变量testvar4的值。

执行结果:

success






cheer

${var:?message} 当变量var的值为非空字符串时,为变量var的值,当变量var为空时,打印出message的值,并跳出。

例:

testvar1=jiayou
echo ${testvar1:?success} #变量testvar1的值非空时,打印出变量testvar1的值
testvar2=
echo ${testvar2:?success} #变量testvar2为空字符串时,打印出字符串success,并跳出,不再执行下边的动作

testvar4=cheer                                                                                                                               
echo ${testvar3:?$testvar4} #因为前面已经跳出所以此处不再执行

执行结果

jiayou
./test.sh: line 175: testvar2: success

${string/substring/replacement} 使用$replacement, 来代替第一个匹配的$substring

${string//substring/replacement} 使用$replacement, 代替所有匹配的$substring

例:

testvar1=AAABBBCCCBBBDDD                                                                                                                     
echo ${testvar1/BBB/DDD}
echo ${testvar1//BBB/EEE}

打印结果:

AAADDDCCCBBBDDD
AAAEEECCCEEEDDD

字符串匹配


字符串的头尾截取

${var#pattern} 去掉变量var中开头与pattern相匹配的部分,通配符使用的情况下,最短匹配原则,通配符不使用的情况下,匹配指定字符串。

${var##pattern} 去掉变量var中开头与pattern相匹配的部分,通配符使用的情况下,最长匹配原则,通配符不使用的情况下,匹配指定字符串。

${var%pattern} 去掉变量var中尾部与pattern相匹配的部分,通配符使用的情况下,最短匹配原则,通配符不使用的情况下,匹配指定字符串。

${var%%pattern} 去掉变量var中尾部与pattern相匹配的部分,通配符使用的情况下,最长匹配原则,通配符不使用的情况下,匹配指定字符串。

testvar1=AAABBBCCC
echo ${testvar1#A}
echo ${testvar1##A}
echo ${testvar1#*B}
echo ${testvar1##*B}
echo ${testvar1%B}
echo ${testvar1#B}
echo ${testvar1%C}                                                                                                                           
echo ${testvar1%%C}
echo ${testvar1%B*}
echo ${testvar1%%B*}

打印结果:

AABBBCCC
AABBBCCC
BBCCC
CCC
AAABBBCCC
AAABBBCCC
AAABBBCC
AAABBBCC
AAABB
AAA

字符串的长度

${#var}得到变量var的字符串长度
例:
testvar1=AAABBBCCC                                                                                                                           
echo ${#testvar1}
打印结果:
9

字符串位置

postion为第几个位置,此位置前面的字符为被匹配的(被删除的),length表示剩下的字符的长度:
${var:postion}  # 从左往右看,匹配postion位置之左的,留下之后的
${var:postion:length} # 匹配postion位置之前的同时,显示之后的长度为length

例:
testvar1=AAABBBCCC
echo ${testvar1:3}
echo ${testvar1:3:3}  
打印结果:
BBBCCC
BBB

                             


0 0