shell脚本
shell执行脚本是一门解释性语言、批量化处理语言,大大的节省了工作成本
shell脚本第一行必须以 #!开头,它表示该脚本使用后面的解释器解释执行。
#!/bin/bash
1.常见的通配符:
* : 匹配0个或多个任意字符
? : 匹配一个任意字符
[若干字符] : 匹配方括号中任意一个字符的一次出现
2.命令代换:
反引号`` 或者 $()
//查某个容器的编号,赋值给num变量
num=$(docker ps -a | grep -i "test" | awk '{print$1}')
3.单引号和双引号
Shell脚本中的单引号和双引号一样都是字符串的界定符,单引号用于保持引号内所有字符的字面值,而双引号有些情况则特殊。如果字符串中有特殊字符需要处理时就用双引号。
注:单引号标注的字符中不能再出现单引号。
4.条件判断 流程控制
"if" 表达式 如果条件为真则执行then后面的部分:
if ....; then
....
elif ....; then
....
else
....
fi
通常用" [ ] "来表示条件测试。注意这里的空格很重要。要确保方括号的空格。
[ -f "somefile" ] :判断是否是一个文件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等
例如:
#!/bin/sh
if [ "$SHELL" = "/bin/bash" ]; then
echo "your login shell is the bash (bourne again shell)"
else
echo "your login shell is not bash but $SHELL"
fi
5.输出变量前加$。例如:echo $num 或者明确一些 echo ${num}
6.执行shell脚本。先修改脚本权限增加可执行:chmod +x filename
然后,您可以通过输入: ./filename 来执行您的脚本。或者sh filename
7.SED 命令,替换数据
1.把开头/结尾为str1的行替换为str2:
sed -i 's/^str1.*/str2/' filename ###以str1开头
sed -i 's/.*str1$/str2/' filename ###以str1结尾
sed -i 's/.*str1.*/str2/' filename ###含有str1
sed -i 's/旧字符串/新字符串/g' filename
2.将文件中含 "arr" 字符串的数据行中的 "str1" 字符串 , 替换成为 "str2" 字符串:
sed -e '/arr/s/str1/str2/g' filename ##含有g说明是全局替换
3.将文件中第 5 行数据 , 替换成句子"hello world!!!"
sed -e '5c\hello world!!!' filename
4.将文件中 1 至 100 行 , 替换成如下两行:
how are you?
my name is feige.
命令如下:
sed -e '1,100c\
How are you?\
my name is feige.
' filename
删除数据
1.删除空行:
sed -e '/^ *$/d' filename ### *号前面有一个空格符哦~
2.删除含有指定字符串str的行:
sed -f '/str/d' filename
移动数据
1.将文件中的前 100 数据 , 搬到文件中第 300 后输出。其命令如下:
sed -f mov.txt targetfile ## targetfile是要操作的文件,mov.txt里面放的是操作指令
其中mov.txt文档的内容为:
1,100{
H
d
}
300G
2.将from.txt文件中含 "phi" 字符串的数据行 , 移动到to.txt文件中储存。其命令如下:
sed -e '/phi/w to.txt' from.txt
3.将 from.txt文件内容 , 移动至to.txt文件中含 "beta" 字符串的数据行。其命令如下:
sed -e '/beta/r from.txt' to.txt
搜索数据
1.将文件中含 "omega" 字符串的数据输出:
sed -f grep.txt targetfile
其中grep.txt的内容如下:
/omega/b
N
h
s/.*\n//
/omega/b
g
D