嵌入式成长轨迹2【嵌入式环境及基础】【嵌入式Linux软件开发入门】【Shell脚本基础】
【Shell常用命令讲解】
一、命令替换
echo "The date is `date`" 在单个命令行中使用多个命令
$ expr 4 + 5 该命令的输出作为标准输出,用于求值算术表达式,注意4后5前都有空格,否则会考虑为字符串
$((expression)) 同样功能,不会考虑为字符串
echo 输出
echo $变量 输出变量对应的值
read +变量 接下来的输入赋予变量
其中打入-n表示不换行(注意,是不换行)
二、条件执行
test和 [ ] 两个命令都为表达式求值,返回布尔值
1、[]前后都应有空格
2、test
test也可以用于字符串状态、检查文件状态(是否存在)
test + (以下:)
1)数值测试
-eq ==
-ne !=
-gt >
-ge >=
-lt <
-le <=
2)字符串测试
=、!=
-z + 字符串 字符串是否长度为零
-n + 字符串 字符串是否长度非零
3)文件测试
-e + 文件 是否存在
-r + 文件 是否存在且可读
-w + 文件 是否存在且可写
-x + 文件 是否存在且可执行
-s + 文件 是否存在且至少有一个字符
-d + 文件 是否存在且为目录
-f + 文件 是否存在且为普通文件
-c + 文件 是否存在且为字符特殊文件
-b + 文件 是否存在且为块特殊文件
文件测试中的连接符
并且 -a
或者 -o
非 !
三、if……fi结构
if[]
then ……
elif []
then ……
else ……
fi
四、case……esac结构
使用这个构造依据变量的值执行一组特定指令
case $变量 in
值1)echo “”;;
值2)echo “”;;
*)echo“”;;
esac
双分号有break直接跳出此结构的功能
五、循环
1、while构造
while <条件>
do
<各种命令>
done
2、until构造
求值模式与while相反,将执行直到求值条件为真
执行最少一次
3、for构造
for 变量名 in 值列表
do……
done
其中,break和continue也可使用
命令+>>+文件 将命令结果重定向到文件
六、控制进程的执行
用于请求后台进程的符号&
$ wc tempfile &
[1] 2082
$ vi newfile
七、后台进程
1、检查后台进程
Ps 在进程状态为每个当前活动的每个进程产生一行入口(代号)
2、终止后台进程
$ kill 278
八、查看完成一个命令所花的时间——time
$ time find /etc -name "passwd" 2> /dev/null
重定向到/dev/null把错误信息忽略掉
九、管道的介绍
| 是管道符号
它指示shell:
|前面的命令的输出作为|之后的命令输入发送
如:
ls -l | more
分页显示 查看详细信息
【demo代码】
一、
The First Shell!
1 echo "please enter your name:"
2
3 read fname
4
5 echo ${fname}
6
7 s=xxx
8
9 echo $s
#对应终端操作
[root@localhost ~]# ls -l
First.sh
-rw-r--r-- 1 root root 6 02-21 19:02 First.sh
[root@localhost ~]# ./First.sh
bash:
./First.sh: 权限不够
[root@localhost ~]# chmod a+x First.sh
[root@localhost ~]# ls -l
First.sh
-rwxr-xr-x 1 root root 6 02-21 19:02 First.sh
[root@localhost ~]# ./First.sh
please enter your name:
mood
mood
xxx
[root@localhost ~]# vi First.sh
[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# echo $PATH
/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
[root@localhost ~]# vi /etc/profile
在里边进行改动,添加当前路径.作为PATH其中之一,重启动即可直接访问当前目录下的文件无须加./
二、
# CallCenter.sh
1 #!/bin/bash
2
3 echo "Please enter Total number:"
4 read total
5 echo "Please enter resolve number:"
6 read res
7 echo $((total-res))
三、
# Avg.sh
1 echo "Please enter score:"
2 read score
3 if [ $score -lt 80 ]
4 then
5 echo "Bad!"
6 elif [ $score -ge 80 -a -lt 90 ]
7
8 then
9 echo "Good!!"
10 else
11 echo "Very Good!!"
12
13 fi