网站建设 价格,做外贸上哪些网站,建筑工程网络推广,网站移动端和手机端分开做文章目录Linux嵌入式开发——shell脚本一、shell脚本基本原则二、shell脚本语法2.1、编写shell脚本2.2、交互式shell脚本2.3、shell脚本的数值计算2.4、test命令运算符||运算符2.5、中括号[]判断符2.6、默认变量三、shell脚本条件判断if thenif then elsecase四、she…
文章目录Linux嵌入式开发——shell脚本一、shell脚本基本原则二、shell脚本语法2.1、编写shell脚本2.2、交互式shell脚本2.3、shell脚本的数值计算2.4、test命令运算符||运算符2.5、中括号[]判断符2.6、默认变量三、shell脚本条件判断if thenif then elsecase四、shell脚本函数不带参数带参数五、shell循环whileuntilforLinux嵌入式开发——shell脚本
经过我们前面的学习我们已经能够在终端中输入命令来完成一些常用的操作但是都是一条一条地输入命令如果需要执行的命令一旦多起来就会很麻烦。那么有没有一种方式可以将很多条命令放到一个文件里面然后直接运行这个文件便可执行这些命令当然有这就是我们接下来要介绍的shell脚本
shell脚本类似windows的批处理文件就是将连续执行的命令写成一个文件。shell脚本提供数组、循环、条件判断的等功能一般是Linux运维或者系统管理员要掌握的但作为嵌入式开发人员我们只需要掌握shell脚本最基础的部分即可。
一、shell脚本基本原则
shell脚本是个纯文本文件命令从上而下一行一行的开始执行。shell脚本扩展名为.sh。而且shell脚本第一行一定要为
#!/bin/bash这个表示使用bash。 二、shell脚本语法
2.1、编写shell脚本
接下来我们来编写第一个简单的shell脚本主要功能就是在终端显示一下“hello world”。我们接下来看一下具体的代码吧
#!/bin/bash
echo hello world!但是我们看一下这个.sh文件的权限吧
-rw-rw-r-- 1 ygr ygr 32 1月 26 15:08 my.sh我们可以看到这个文件是不可执行的于是我们修改一下权限让他变成可执行文件。
chmod 777 my.sh接下来我们来执行一下这个文件看一下最后的输出结果是什么。我们可以看到最后输出了我们的“hello world”。
ygrygr-virtual-machine:~/桌面$ ./my.sh
hello world!2.2、交互式shell脚本
接下来我们要接触的就是交互式脚本我们已经学会在终端打印了接下来我们来学习一下如何输入。我们使用的命令是read命令接下来看一下我们的具体代码
#!/bin/bash
echo please input name:
read name
echo your name: $name然后运行效果
please input name:
chenyi
your name: chenyi我们的read命令可以加入许多的参数我们只简单介绍一个剩下的大家自己去看看。
#!/bin/bash
read -p please input name and age: name age
echo your name $name, your age $age.这个命令就是用来输入的时候去提示用户的我们看一下运行结果
please input name and age: chenyi 30
your name chenyi, your age 30.2.3、shell脚本的数值计算
shell仅支持整形数值计算我们使用如下语句去进行
#!/bin/bash
echo please input two int num:
read -p first num: first
read -p second num: second
total$(($first $second))
echo $first $second $total运行结果
please input two int num:
first num: 4
second num: 6
4 6 102.4、test命令
test命令主要用于查看文件是否存在、权限等信息可以进行数值字符文件三方面的测试。在这之前我们先介绍一下和||这两个命令
运算符
我们知道“”在C语言里面是与的意思但是在shell语法里面这个不是与的意思但是有一点类似我们接下来举个例子来看一下。
“cmd1 cmd2” 的意思就是当cmd1执行完并且正确时那么cmd2开始执行如果cmd1执行错误那么cmd2不执行。只能说有点像C语言里面的短路接下来我们来介绍一下||运算符。
||运算符
我们知道“||”在C语言里面是或的意思但是在shell语法里面这个不是或的意思而是或者的意思我们接下来举个例子来看一下。
“cmd1 || cmd2” 的意思就是当cmd1执行完毕并正确时cmd2不执行反之cmd2执行。就是两者执行其一所以我说是或者的意思。而且这两个命令一般都是结合在一起使用的。
接下来我们来看一看test命令的具体使用方法吧
#!/bin/bash
read -p please input file name: filename
test -e $filename echo $filename exist || echo $filename no exist运行结果
please input file name: C-test
C-test exist这个是来查看文件是否存在我们接下来看一看字符串的判断
#!/bin/bash
echo please input two string:
read -p first string: first
read -p second string: second
test $first $second echo equality || echo inequality运行结果
please input two string:
first string: qwert
second string: qwert
equalityplease input two string:
first string: qwe
second string: asd
inequality2.5、中括号[]判断符
[ ]判断符顾名思义就是用来判断的但是里面只能输入 或 !接下来我们来看一下具体的使用方法
#!/bin/bash
echo please input two string:
read -p first string: first
read -p second string: second
[ $first $second ] echo equality || echo inequality这个命令与上面那个命令是等价的。但是要注意变量要加上双引号。
2.6、默认变量
我们接下来介绍一下默认变量接下来我们来看一些默认变量 $0 ~ $n表示shell脚本的参数包括shell脚本命令本身shlle脚本命令本身为$0 $##表示最后一个参数的标号。 $表$1、$2、$3…
我们来看一下具体的代码
#!/bin/bash
echo file name: $0
echo total parameter num: $#
echo all paramenters: $
echo first paramenters: $1
echo second paramenters: $2运行结果
ygrygr-virtual-machine:~/桌面$ ./my.sh qw er rt
file name: ./my.sh
total parameter num: 3
all paramenters: qw er rt
first paramenters: qw
second paramenters: er三、shell脚本条件判断
if then
我们的shell脚本虽然可以通过和||来实现简单的条件判断但是稍微复杂一点的场景就不适合了。所以shell脚本为我们提供了if then条件判断语句写法如下所示我们来看一下具体的代码使用
if 条件判断 ; then
//判断成立要做的事情
fi1 #!/bin/bash2 3 read -p please input(Y/N): value4 if [ $value Y ] || [ $value y ]; then5 echo your input is Y !6 exit 07 fi8 9 if [ $value N ] || [ $value n ]; then10 echo your input is N !11 exit 012 fi运行结果如下所示
ygrygr-virtual-machine:~/桌面$ ./my.sh
please input(Y/N): y
your input is Y !
ygrygr-virtual-machine:~/桌面$ ./my.sh
please input(Y/N): n
your input is N !if then else
除了if then之外我们还有if then else 语句就类似于C语言里面的if else具体的写法如下所示
if 条件判断 ; then
//条件判断成立要做的事情
else
//条件判断不成立要做的事情。
fi或if 条件判断 ; then
//条件判断成立要做的事情
elif [条件判断]; then
//条件判断成立要做的事情
else
//条件判断不成立要做的事情。
fi我们来看一下具体的代码 1 #!/bin/bash2 3 read -p please input(Y/N): value4 if [ $value Y ] || [ $value y ]; then5 echo your input is Y !6 exit 07 else8 echo your input is: $value !9 exit 010 fi运行结果如下所示
please input(Y/N): t
your input is: t !please input(Y/N): y
your input is Y !接下来是elif我们来看看具体的使用代码 1 #!/bin/bash2 3 read -p please input(Y/N): value4 if [ $value Y ] || [ $value y ]; then5 echo your input is Y !6 exit 07 elif [ $value N ] || [ $value n ]; then8 echo your input is: $value !9 exit 010 else11 echo your input is not recognized!12 fi运行结果
please input(Y/N): r
your input is not recognized!please input(Y/N): y
your input is Y !please input(Y/N): n
your input is: n !case
接下来我们来介绍一下case语句这个与我们在C语言里面的case是类似的具体的写法如下所示
case $变量 in“第1个变量内容”)
程序段
;; # 表示该程序块结束“第2个变量内容”)
程序段
;;“第n个变量内容”)
程序段
;;esac接下来我们来看一看具体的代码实现 1 #!/bin/bash2 3 case $1 in4 chen)5 echo chen yi is my baby!6 ;;7 ye)8 echo ye! happy every day!9 ;;10 *)11 echo your input is not recognized!12 ;;13 esac运行结果如下所示
ygrygr-virtual-machine:~/桌面$ ./my.sh ye
ye! happy every day!ygrygr-virtual-machine:~/桌面$ ./my.sh chen
chen yi is my baby!ygrygr-virtual-machine:~/桌面$ ./my.sh chr
your input is not recognized!四、shell脚本函数
不带参数
shell脚本也是支持函数的不带参数的函数写法如下
function fname () {# 函数代码段
}具体的代码如下所示 1 #!/bin/bash2 3 function help(){4 echo this is help cmd!5 }6 7 function close(){8 echo this is close cmd!9 }10 11 case $1 in12 -h)13 help14 ;;15 -c)16 close17 ;;18 esac运行结果如下所示
ygrygr-virtual-machine:~/桌面$ ./my.sh -h
this is help cmd!
ygrygr-virtual-machine:~/桌面$ ./my.sh -c
this is close cmd!带参数
接下来我们来介绍一下函数带参数的情况具体的写法如下所示 1 #!/bin/bash2 3 print(){4 echo parameter 1:$1!5 echo parameter 2:$2!6 }7 8 print chen ye运行结果如下所示
parameter 1:chen!
parameter 2:ye!五、shell循环
while
shell脚本也支持循环比如 while do done表示当条件成立的时候就一直循环直到条件不成立具体的语法格式如下所示
while [条件] # 括号内的状态是判断式
do # 循环开始# 循环代码段
done具体的实现代码如下所示 1 #!/bin/bash2 3 while [ $value ! close ]4 do5 read -p please input str: value6 done7 8 echo stop while!!!运行结果如下所示
please input str:er
please input str:stop
please input str:close
stop while!!!until
还有另外一种until do done表示条件不成立的时候循环条件成立以后就不循环了具体的语法格式如下所示
until [条件]
do
//循环代码段
done具体的实现代码如下所示 1 #!/bin/bash2 3 until [ $value close ]4 do5 read -p please input str: value6 done7 8 echo stop while!!!运行结果如下所示
please input str:co
please input str:close
stop while!!!for
shell脚本的for循环和python的for非常类似其实就是因为python其实也算是脚本语言使用for循环可以知道有循环次数具体的语法格式如下所示
for var in con1 con2 con3……
do
# 循环代码段
done#for循环数值处理写法 for((初始值; 限制值; 执行步长))
do
# 循环代码段
done具体的语法实现如下所示 1 #!/bin/bash2 3 for name in ygr cy4 do5 echo your name is :$name!6 done运行结果如下所示
your name is :ygr!
your name is :cy!接下来我们看一下另外一个for循环 1 #!/bin/bash2 3 read -p please input count: count4 5 total06 for((i0; icount; ii1))7 do8 total$(($total$i))9 done10 11 echo 前n个整数之和为 $total运行结果如下所示
please input count: 5
前n个整数之和为 15