0%
shell-script的学习和使用
注意事项
- 指令的执行是从上而下、从左到右;
- 指令、选项、参数间的多个空白都会被忽略;
- 空白行也会被忽略,Tab空白也视为空白行;
- 如果读取到一个Enter(CR)符号,就开始执行该行命令;
- 如果一行的内容太多,可以使用
\Enter
来延伸到下一行;
#
是注释符号,该符号后面的数据全部被视为注释文字;
- 脚本需要有
rx
权限才能被执行,脚本的执行可通过绝对路径、相对路径、变量PATH
实现,除此之外,还可以通过bash程序来执行bash script.sh
or sh script.sh
;
- 主文件夹下的
~/bin
目录默认被设置到${PATH}
中,也可以将脚本存放到~/bin
下,直接输入script.sh
执行脚本;
从前往后删除
- 变量的删除使用符号
#
和##
,区别是:前者代表删除最短,后者代表删除最长的;
- 使用的格式是
${变量#/xxxx}
or ${变量##/xxxx}
,删除从最前面开始向右删除
- 示例,变量test_path的内容与PATH相同,分别删除最短的一个路径和删除最长的一个路径(仅剩下一个最短的)
sed工具
- sed是一个管线命令,可以分析标准输入,而且可以将数据取代、删除、新增、撷取特定行;
- sed工具的命令格式:
sed [-nefre] '[n1,n2][command]'
-n
: 使用安静模式silent,在sed的一般应用中,所有来自标准输入的数据都会列到屏幕中,如果使用了安静模式,只有经过sed处理的那一行数据才会被输出到屏幕中;
-e
: 直接在命令行界面上进行sed的动作编辑;
-f
: 直接将sed的动作写在一个文件内,使用该参数指定文件路径名称;
-r
: sed动作支持的是延伸型正则表达式,不使用参数,默认使用基础正则表达式语法;
-i
: 直接修改读取的文件内容,而不是由屏幕输出
n1,n2
: 选择进行动作的行数,连同后接的命令需要用单引号括住
- command中可以使用的命令有:
a
新增到下一行,后接字符串,新增多行的,需要在每行最后添加换行符号\
在最后一行后新增内容sed -i '$a new add content' filename
c
取代n1,n2之间的行,后接字符串,ex: nl ~/test | sed ‘2,5c This is a replace contend’`使用This is a replace contend取代2-5行的全部内容
d
删除,删除空白行sed '/^$/d'
i
插入到上一行,后接字符串
p
打印输出,可以用于取出特定行的内容,ex: nl /etc/shadow | sed -n '2,5p'
s
取代,直接进行取代的工作,格式s/要取代的字符/新字符/g
- 使用sed工具取出eth0的ip地址
ip addr | grep 'eth0$'
| sed ‘.inet.//g’ | sed ‘s/\24.$//g’
bash常用
*
: 代表0到无穷个任意字符
?
: 代表一定有一个任意字符
[]
: 代表一定有一个括号内的字符
[x-x]
: 代表有一个x到x范围内的字符
[^]
: 代表反向,没有括号内的字符
正则表达常用
^word
: 以word开头
word$
: 以word结尾
.
: 任意一个字符,可以是空白格,一定有一个
\
: 转义字符
*
: 重复0到无穷个前一个字符,任意字符的表示.*
,注意与bash中的区分
[]
: 集合内的一个字符
[x-x]
: x-x范围内的一个字符
[^]
: 没有范围内的字符
x\{n1,n2\}
: 连续n1或n2个x字符,使用符号\
将符号{}
进行转义
- bash的进站与欢迎信息,通过文件
/etc/issue
和/etc/motd
2个文件实现
- CentOS默认的进站信息如下: