1、使用awk命令获取文本的某一行,某一列
1、打印文件的第一列(域) : awk '{print $1}' filename
2、打印文件的前两列(域) : awk '{print $1,$2}' filename
3、打印完第一列,然后打印第二列 : awk '{print $1 $2}' filename
4、打印文本文件的总行数 : awk 'END{print NR}' filename
5、打印文本第一行 : awk 'NR==1{print}' filename
6、打印文本第二行第一列 : sed -n "2, 1p" filename | awk 'print $1'
2、文件比较运算符
1. -e filename 如果 filename存在,则为真 如: [ -e /var/log/syslog ]
-s 文件存在并且文件size大于0
-S 文件存在并且文件是socket文件
2. -d filename 如果 filename为目录,则为真 如: [ -d /tmp/mydir ]
3. -b 块设备 -c 字符设备
4.-h filename 如果 filename存在且是一个软链接时,则为真
5. -f filename 如果 filename为常规文件,则为真 如: [ -f /usr/bin/grep ]
6. -L filename 如果 filename为符号链接,则为真 如: [ -L /usr/bin/grep ]
7. -r filename 如果 filename可读,则为真 如: [ -r /var/log/syslog ]
8. -w filename 如果 filename可写,则为真 如: [ -w /var/mytmp.txt ]
9. -x filename 如果 filename可执行,则为真 如: [ -L /usr/bin/grep ]
10. filename1-nt filename2 如果 filename1比 filename2新,则为真 如: [
/tmp/install/etc/services -nt /etc/services ]
11. filename1-ot filename2 如果 filename1比 filename2旧,则为真 如: [
/boot/bzImage -ot arch/i386/boot/bzImage ]
3、字符串比较运算符(请注意引号的使用,这是防止空格扰乱代码的好方法)
1. -z string 如果 string长度为零,则为真 如: [ -z "$myvar" ]
2. -n string 如果 string长度非零,则为真 如: [ -n "$myvar" ]
3. string1= string2 如果 string1与 string2相同,则为真 如: [ "$myvar" = "one two three" ]
4. string1!= string2 如果 string1与 string2不同,则为真 如: [ "$myvar" != "one two three" ]
4、算术比较运算符
1. num1-eq num2 等于 如: [ 3 -eq $mynum ]
2. num1-ne num2 不等于 如: [ 3 -ne $mynum ]
3. num1-lt num2 小于 如: [ 3 -lt $mynum ]
4. num1-le num2 小于或等于如: [ 3 -le $mynum ]
5. num1-gt num2 大于 如: [ 3 -gt $mynum ]
6. num1-ge num2 大于或等于如: [ 3 -ge $mynum ]
5、布尔运算符
! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。
-o 或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。
6、逻辑运算符
&& 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true
7、输出重定向 标准信息数字
1>/dev/null 2>&1
>前面的数字:
0代表标准输入
1代表stdout标准输出,默认值为1,所以”1>/dev/null”可以简写为”>/dev/null”,全部输入
2代表stderr标准错误输出,只有命令返回异常的错误信息才会输入到后面,正常的信息会打印出来
2>&1
代表把stderr标准错误输出 重定向 到1表示的stdout标准输出所在的地方,也就是 /dev/null
注意2>1这里的1表示的是文件名,而不是标准输出
/dev/null 代表空设备文件
所以,1>/dev/null 2>&1的解释就是
将stdout标准输出重定向到空设备文件/dev/null ,同时将stderr标准错误输出的重定向跟stdout标准输出重定向一致,也输出到空设备文件/dev/null。
8、shell参数
$0 脚本名
$1 参数1,以此类推
$# 参数个数
$* 所有参数内容
$@ 所有参数
$? 上个命令或函数的返回值
9、不用if进行判断
[ "$SHOW_DETAIL" == "1" ] && echo "&&" || echo "||"
[]里面为真就执行&&后面的,为假就执行||后面的
[ "$SHOW_DETAIL" == "1" ] || echo "||"
单独一个条件也适用
[ "$SHOW_DETAIL" == "1" ] && {
echo "&&"
} || {
echo "||"
}
条件中多行语句使用{}包括
注意:sh只能使用=,bash都可使用=和==
10、while循环实例
#!/bin/bash
i=1
sum=0
while [ $i -le 100 ]
do
let sum=sum+$i
let i++
done
#!/bin/sh
dev=sdb1
n=$1
a=1
while true
do
dd if=/dev/zero of=$n-$a.img bs=1M count=16 2>/dev/null
# sync
if [ $a -eq 66 ]; then
a=1
else
a=`expr $a + 1`
fi
done
11、添加默认路由网关
ip route add default/0 via 192.169.5.1 dev eth0,默认走4G网络,没4G时设置默认走以太网。
linux_genvict:~# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.1.1 0.0.0.0 UG 0 0 0 usb0
192.168.0.0 * 255.255.255.0 U 0 0 0 lmi40
192.168.1.0 * 255.255.255.0 U 0 0 0 usb0
192.168.8.0 * 255.255.255.0 U 0 0 0 eth0
192.168.42.0 * 255.255.255.0 U 0 0 0 rndis0
192.168.110.0 * 255.255.255.0 U 0 0 0 muap0
192.169.5.0 * 255.255.255.0 U 0 0 0 eth0