1 `` () {} (()) []的区别
$`` 和 $()
在 bash shell 中,$( ) 与` ` (反引号) 都可用做命令替换用。例如:date=$(date +%Y%m%d)和date=$`date +%Y%m%d`得到系统时间
其中:`` 基本所有unix shell中使用,()不是所有shell支持
${}
用于变量的替换,例如:
filename="123.txt"
filename1="${filename%.txt}_1.txt"
其中,${}中的模式匹配:
${variable#pattern} 去掉左边最短的匹配模式
${variable##pattern} 去掉左边最长的匹配模式
${variable%pattern} 去掉右边最短的匹配模式
${variable%%pattern} 去掉右边最长的匹配模式
${variable/oldword/newword} 替换第一个旧字符为新字符
${variable//oldword//newword} 替换所有旧字符为新字符
其他:
var=${str-expr}
var=${str:-expr}
var=${str+expr}
var=${str:+expr}
var=${str=expr}
var=${str:=expr}
var=${str?expr}
var=${str:?expr}
$[] 和 $(())
两者都用于数学运算,例如
read -p "First number": firstnum
read -p "Second number": secondnum
total=$((${firstnum}*${secondnum}))
2.grep sed awk
grep(管道命令,支持正则表达式的关键字) 主要用于查找,以行为结果进行输出
常用选项: -n 显示行号
-vn 反向选择不包含关键字的行
-in 忽略关键字的大小写,模糊查找
-A 关键字的前几行也匹配出来, -A 2
-B 关键字的后几行也匹配出来, -B 3
sed(管道命令)
主要用于编辑,按行输出
基本工作方式: sed [-nef] '[动作]' [输入文本]
常用选项:
-n : 安静模式, 一般sed用法中, 来自stdin的数据一般会被列出到屏幕上, 如果使用-n参数后, 只有经过sed处理的那一行被列出来.
-e : 多重编辑, 比如你同时又想删除某行, 又想改变其他行, 那么可以用 sed -e '1,5d' -e 's/abc/xxx/g' filename
-f : 首先将 sed的动作写在一个档案内, 然后通过 sed -f scriptfile 就可以直接执行 scriptfile 内的sed动作 (没有实验成功, 不推荐使用)
-i : 直接编辑, 这回就是真的改变文件中的内容了, 别的都只是改变显示. (不推荐使用)
动作:
a 新增, a 后面可以接字符串, 而这个字符串会在新的一行出现. (下一行)
c 取代, c 后面的字符串, 这些字符串可以取代 n1,n2之间的行
d 删除, 后面不接任何东西
i 插入, 后面的字符串, 会在上一行出现
p 打印, 将选择的资料列出, 通常和 sed -n 一起运作 sed -n '3p' 只打印第3行
s 取代, 类似vi中的取代, 1,20s/old/new/g
awk(管道命令)
主要用于分析,按每行的字段进行输出
基本工作方式:awk '条件类型1{动作1} 条件类型2{动作2}...'
awk命令较为复杂,使用时候再man awk查看
3.script执行的差异
source shellfile 在当前进程下执行script
sh shellfile 创建子进程执行script
4.test命令,测试文件及相关属性
常用选项: -e 档名是否存在
-f 档名是否存在且为文件类型
-d 档名是否存在且为目录类型
-r/-w/-x... 权限检查
-nt 判断file1是否比file2新 test file1 -nt file2
-od 与-nt相反
-ef file1和file2是否是同一文件,主要判断hard link
-eq/-ne...整数之间的判断
-z/-n/==/!= 字符串的判断
-a -o ! 多重判定,类似与或非
5.条件判断句式
1)
if [ exp ]; then
code
fi
2)
if [ exp ]; then
code1
else
code2
fi
3)
if [ exp1 ]; then
code1
elif [ exp2 ]; then
code2
else
code3
fi
4)
case $var in
"condition1")
code1
;;
"condition2")
code2
;;
*)
code3
;;
esac
6.func功能
语法:
function fun(){
code
}
函数调用
fun() parementer1 ...
7.循环语句
1)
while [ condition ]
do
code
doen
2)
until [ condition ]
do
code
done
3)
for var in condition1 condition2 condition3...
do
code
done
4)
for ((初始值; 限制值; 执行步阶))
do
程序段
done
8.cut命令
-b:按字节筛选;
-n:与"-b"选项连用,表示禁止将字节分割开来操作;
-c:按字符筛选;
-f:按字段筛选;
-d:指定字段分隔符,不写-d时的默认字段分隔符为"TAB";因此只能和"-f"选项一起使用。
-s:避免打印不包含分隔符的行;
--complement:输出不符合要求的列(补集)
--output-delimiter:指定输出分割符;默认为输入分隔符。
9.command > file 2>file 与command > file 2>&1 有什么不同的地方.
首先 command > file 2>file 的意思是将命令所产生的标准输出信息,和错误的输出信息送到file中,command > file 2>file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file 的管道.
而command >file 2>&1 这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容.