一、 sed用法 (只介绍本人目前应用到2种)
1.sed -i " s# AAA#BBB#" CCC在 CCC中 用BBB替换AAA
-i 表示把 把修改写入文件
2.sed -i "AAA s#\(BBB=\).*#\1CCC#" DDD
\( ... \) 这个是组的概念,后面用\1来原封不动地引用
此用法相当于AAA为变量名称 修改AAA变量的值
来个例子说明:
脚本内容:
#!/bin/bash
#\( ... \) 这个是组的概念,后面用\1来原封不动地引用
sed -i "/BBB/ s#\(.*=\).*#\1$1#" AAA.txt
文件内容:
文件名字 AAA.txt
BBB=11111
运行脚本:
./test.sh 22222
运行脚本后的结果:
BBB=22222
二、 shell脚本中的local 值只能用于 function 方法中不能用于脚本中
例如#!/bin/sh
local test # 这种使用方法是错误的
function aaa()
{
local test2 # 这样子才是正确的使用方法
}
三、shell 脚本中的 return 只能 return int 不能 return 字符
例如#!/bin/sh
function A ()
{
return testA # 介个是不正确的
}
function B ()
{
return 1 #几个是正确的
}
四、shell 脚本中的相当于截取命令(非cut)
例如:#!/bin/sh
X="HelloBoy"
Y="Hello"
# 现在你想获取 Boy 这个字符 可以使用
Z=$(X#$Y)
#Z的值就是Boy
# 注意的是 X前面没有 “$” 符号
五、 shell 脚本判断上一指令返回值
例如:#/bin/bash
# 利用上面例子测试
X="HelloBoy"
echo $?
Y="Hello"
# 通过四 可以知道 下面这种写法是错误的
Z=${$X#$Y}
echo $?
打印结果:
0
./test.sh: line 7: ${$X#$Y}: bad substitution
1
说明:当上一指令没有报错完成后 返回0 如果报错返回非0 不一定是1 哦
六、shell 删除除了xxx文件的所有文件
方法一
#!/bin/sh
find . -maxdepth 1 -type f ! \( -name 'aaa' -o -name 'ccc' \) -exec echo rm -f {} \;
稍微说明一下
-maxdepth 1 : 说明查找的深度
-type f : 查找的文件类型
-name : 要文件的名字
-o : 连接的作用
-exec : find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格。
因为 () 在shell 脚本有特殊用处 说以需要转义符 “\”
方法二
#!/bin/sh
ls -1 | grep -v '\<make.sh\>\|\<aaa\>\|\<ccc\>\|\<clean.sh\>' | xargs -i rm -rf {}
跟第一种差不多就说一下
xargs 介个说白了 就是 把上一个命令运行下来的值给下一个命令使用
错误的方法:
#!/bin/sh
rm -rf !(aaa|ccc)
说明: 虽然 直接运行 rm -rf !(aaa|ccc) 可以 但是 在shell 脚本中 “()” 有特殊使用的
注意 rm -rf !(aaa|ccc) "|" 2边没有空格