嵌入式linux开发:[7]shell
1、1.1 shell
如下为一个3G拨号看门狗程序:
#!/bin/sh
echo $1
mdev -s
/app/test.sh &
cp /app/resolv.conf /etc/
sleep 10
ifconfig eth0 down
sleep 2
while true
do
cp/app/resolv.conf /etc/
ping -s 1 -c 1 $1
if [ "$?" !="0" ]
then
ncount=$((ncount+1))
echo "ttt "
if [ $ncount -eq 5 ]
then
killall -9 pppd
let ncount=0
sleep 2
/app/pppd call wcdma &
fi
sleep 1
else
let ncount=0
echo $ncount
sleep 2
fi
done
2、1.1.1 变量
linux shell的变量可以不定义而直接使用
1.1.2 比较
一、test命令
test命令是shell内部命令,它计算作为其参数的表达式是真还是假。
如果表达式为真,则test返回0(注意与C语言0表示false不同),如果表达式为假,返回非0。
shell提供了另外一个调用test命令的方式,就是用方括号[]来代替单词test。
调用test命令的格式为:
test expr1 opr expr2 或是 [ expr1 opr expr2 ]
test opr expr1 或是 [ opr expr1 ]
(注意方括号与表达式之间的空格必须存在)
二、逻辑运算符
-a expr1 -aexpr2 逻辑与
-o expr1 -oexpr2 逻辑或
! !expr1 逻辑非
三、数值判断
-eq num1 -eqnum2 是否相等
-ne num1 -nenum2 是否不相等
-gt num1 -gtnum2 是否大于
-ge num1 -genum2 是否大于等于
-lt num1 -ltnum2 是否小于
-le num1 -lenum2 是否小于等于
四、字符串判断
= str1 = str2 字符串是否相等
!= str1 != str2 字符串是否不等
-n -n str1 字符串长度是否不等于0
-z -z str2 字符串长度是否等于0
五、文件判断
-r -r filename 文件是否存在且可读
-w -w filename 文件是否存在且可写
-s -s filename 文件是否存在且长度非0
-f -f filename 文件是否存在且是普通文件
-d -d filename 文件是否存在且是一个目录
六、命令行参数/位置变量
$0 脚本的名字
$1, $2, ..., $9 脚本第1个到第9个命令行参数
$# 命令行参数的个数
$@ 或是 $* 所有命令行参数
$? 最后一条命令的退出状态
$$ 正在执行进程的ID(PID)
1.1.3 条件
if [ -e /mnt/mtd/boot.sh ]; then
sh /mnt/mtd/boot.sh
else
cp /app/boot.sh /mnt/mtd
sh /mnt/mtd/boot.sh
fi
1.1.4 循环
1.1.5 运算
1:使用 expr 外部程式
加法 r=`expr 4 + 5`
echo $r
注意! '4' '+' '5' 这三者之间要有空白
r=`expr 4 * 5` #错误
乘法 r=`expr 4 \* 5`
2:使用 $(( ))
r=$(( 4 + 5 ))
echo $r
给位置变量赋值:
set One TwoThree
echo $1 $2 $3
结果显示:One TwoThree
3: let 给变量赋值
let ncount=0