《Linux运维之道》笔记二
{}
花括号的用法
逗号
,
分隔多个项目echo {a,b,c} #打印出a b c echo user{01,02,03} #打印出user01 user02 user03 mkdir a{1,2,3} #创建文件夹a1,a2,a3
连续两点
..
创建连续序列echo a{1..10} #打印出a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 mkdir b{1..5} #创建文件夹b1 b2 b3 b4 b5
一、变量
typeset
为变量添加只读属性,防止误操作,当你想改值的时候,会报错。NAME=pengloo53 typeset -r NAME NAME=pengloo
read -p "Please input your name:" NAME
提示符后输入值赋值给变量export NAME
将普通变量转换成环境变量
1、变量的展开替换
${varname:-word}
若varname存在且非null,则返回其值,否则返回word${varname:=word}
若varname存在且非null,则返回其值,否则设置为word${varname:?message}
若varname存在且非null,则返回其值,否则显示varname:message${varname:+word}
若varname存在且非null,则返回word,否则返回null${variable#key}
从头开始删除关键词,执行最短匹配${variable##key}
从头开始删除关键词,执行最长匹配${variable%key}
从尾开始删除关键词,执行最短匹配${variable%%key}
从尾开始删除关键词,执行最长匹配${variable/old/new}
将old替换成new,仅替换第一个出现的old${variable//old/new}
将old替换成new,替换所有的old
2、数组
${name[subscript]}
调用数组变量的值,如果subscript为@
、*
则调用所有的数组成员。A=(11 22 33) echo ${A[0]} #显示11 echo ${A[@]} #显示11 22 33 echo ${A[*]} #显示11 22 33
${ #name[subscript]}
返回${name[subscript]}
的长度。B=(aa bbb cccc) echo ${ #B[2]} #显示4(cccc字符串的长度) echo ${ #B[@]} #显示3(数组成员个数)
3、算数运算
用expr
命令工具大部分应该都知道,如下:
expr 8 + 4
加法expr 8 - 4
减法expr 8 \* 4
乘法expr 8 / 4
除法
然而你也可以通过变量表达式来进行算术运算,语法为:$((expression))
,例如:
$((x+y))
加$((x-y))
减$((x*y))
乘$((x/y))
除$((x%y))
取余$((x++))
自加$((x--))
自减$((x**y))
幂运算
4、测试运算
命令行工具test
,应该不陌生,这里举几个例子就清楚了。
test -d /etc/ && echo "yes" || echo "no"
,/etc/
是目录就显示yes,不是就显示no,它等价与[ -d /etc/ ] && echo "yes" || echo "no"
一对中括号就替代了test
,这里注意的是,中括号左右都要留有空格。
二、正则表达式
1、基本正则表达式(grep)
.
任意单个字符*
匹配前一个字符出现零次或者多次[]
匹配集合中任意单个字符[x-y]
匹配连续的字符串范围^
匹配字串的开头$
匹配字串的结尾[^]
集合取反\
转义后的字符串\{n,m\}
匹配前一个字符重复n到m次\{n,\}
匹配前一个字符重复至少n次\{n\}
匹配前一个字符重复n次\(\)
将\(
与\)
之间的内容存储在『保留空间』,最大存储9个\n
通过\1
至\9
调用保留空间中的内容
除了最后两个,其他的都比较好理解,针对最后两个举个例子:grep --color "\(root\)\(:\).*\2\1" /etc/passwd
筛选出以root:
开头,以:root
结尾的行。
2、扩展的正则表达式(egrep)
+
匹配前一个字符出现一次或者多次?
匹配前一个字符出现零次或者一次|
匹配逻辑or
()
匹配正则集合
egrep --color '(root|admin)' /etc/passwd
找出包含root或者admin的行。
3、Others
除了上述的一些表达式,还有基于其他规范的正则表达式,例如POSIX
规范以及GNU
规范。这里不列举了,可以自行搜索了解。