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 + 1020
$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的值。
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
字符串的长度
echo ${#testvar1}
字符串位置
${var:postion} # 从左往右看,匹配postion位置之左的,留下之后的
${var:postion:length} # 匹配postion位置之前的同时,显示之后的长度为length
echo ${testvar1:3}
echo ${testvar1:3:3}
BBB
- [Bash Shell] Shell学习笔记
- [Bash Shell] Shell学习笔记
- shell shell学习笔记001--什么是shell?
- shell学习笔记【原创】
- shell学习笔记2
- shell(bash)学习笔记
- Shell学习笔记
- shell学习笔记《一》
- Unix shell学习笔记
- shell编程学习笔记
- shell学习笔记
- Linux Shell学习笔记
- Shell学习笔记
- Power Shell 学习笔记
- Shell 编程-学习笔记
- shell编程学习笔记
- Shell学习笔记
- shell 学习笔记
- 【HDU】5343 MZL's Circle Zhou【后缀自动机】
- Struts2.3.4.1+Spring3.2.3+Hibernate4.1.9整合教程并测试成功
- PHP获取当前页面的URL
- iOS下OpenGL ES 3.0编程入门(一):构建Hello World环境
- 深入集合框架之HashSet源码剖析
- shell学习笔记
- 前端工具整理
- leetcode 77: Combinations
- 工厂模式与抽象工厂模式小览(一)
- PHP Object 转 Array
- C/C++学习之构造函数
- 曲面电视七月逆市飙升,借阅兵八月销量或再攀高峰
- 一种简单的准实时上变换方法
- ArcGIS操作学习笔记