系列文章内容
Linux嵌入式学习之Ubuntu入门(一)基本命令、软件安装、文件结构、编辑器介绍
Linux嵌入式学习之Ubuntu入门(二)磁盘文件介绍及分区、格式化等
Linux嵌入式学习之Ubuntu入门(三)用户、用户组及文件权限
Linux嵌入式学习之Ubuntu入门(四)Makefile
Linux嵌入式学习之Ubuntu入门(六)shell脚本详解
文章目录
前言
最近痛定思痛,觉得自己应该硬杠Linux,确实有些难度,但是我觉得学习之后一定会大有用处,而且我不希望局限在当下的情况,学习完嵌入式Linux之后,我想学习制作一些更加有难度,更加锻炼人的东西。
内容有些多,我觉得最好是过一遍,好好记录一下,一些开发最好把暂时用不到的模块跳过,时间不够。
shell脚本详解
shell脚本类似windows的批处理文件,将连续可执行命令写成一个文件,提供数组、循环、条件判断的等功能,shell脚本一般是Linux运维或者系统管理员要掌握的,作为嵌入式开发人员,只需要掌握shell脚本最基础的部分即可。
shell脚本是纯文本文件,命令从上而下,一行一行执行,扩展名为.sh
第一行一定为:(表示使用bash,表示实现shell的环境路径)
c
#!/bin/bash
例如将echo命令写在文件中,在命令窗输出字符串
如上图所示,通过 ls -l 查看tesh.sh文件的权限,之后通过chmod(change mode)修改文件的权限,之后即可运行,但是修改回去后发现,只有读写是不能执行的。
关于文件权限相关见:Linux嵌入式学习之Ubuntu入门(三)用户、用户组及文件权限
详细学习linux的shell脚本推荐《鸟哥的Linux私房菜》
shell脚本语法
外部输入
程序功能:外部输入进行变量赋值
这就涉及到shell的命令编写语法了,需要学习积累
read命令读取输入值,类比C语言的各种函数吧
read命令参数 | 含义 |
---|---|
read -a arrayname | 把单词清单读入arrayname的数组里 |
read -p "text" | 打印提示(text),等待输入,并将输入存储在REPLY中。 |
read -r line | 允许输入包含反斜杠。 |
read -t 3 | 指定读取等待时间为3秒。 |
read -n 2 var | 从输入中读取两个字符并存入变量var,不需要按回车读取。 |
read -d " :" var | 用定界符" :"结束输入行。 |
整型计算
程序功能:输入两个整型完成加法运算:
shell还支持整型运算,数值计算用 $(表达式),如上图
test命令
程序功能:查看文件是否存在:
程序功能:测试输入字符串是否相等:
test命令参数 | 含义 |
---|---|
-e | 当路径存在时返回真 |
-f | 当路径存在且为文件时返回真 |
-d | 当路径存在且为文件夹时返回真 |
-z | 当str为空时返回真 |
-n | 当str为非空时返回真 |
= | 两个字符串相等时返回真 |
== | 两个字符串相等时返回真,同= |
!= | 两个字符串不相等时返回真 |
还有大于小于,各种逻辑运算符的参数,之后用到了再积累
[ ]判断符
程序功能:判断字符串相等。
【】前后要有空格,同时记得变量加上双引号,可以用==或者!=
如果不加双引号,那么这个变量就不可赋值带空格的字符串,因为系统会识别为多个变量。发送错误提示:
first赋值为a,系统输出1,first赋值"1 2",系统会识别为两个变量,这样就不是判断字符串相等
默认变量
程序功能:测试各个默认变量的作用
0 0~ 0 n,表示shell脚本的参数,shlle脚本命令本身为$0
$#:#表示最后一个参数的标号。(参数的个数)
$@:表$1、$2、$3...即所有的参数的集合
条件判断
程序功能:判断输入为Y或者N,并输出语句
格式:
c
/第一种
if 条件判断 ; then
//判断成立要做的事情
fi
/第二种
if
条件判断 ; then
//条件判断成立要做的事情
else
//条件判断不成立要做的事情。
fi
/第三种
if 条件判断 ; then
//条件判断成立要做的事情
elif [条件判断]; then //可以叠加多个elif
//条件判断成立要做的事情
else
//条件判断不成立要做的事情。
fi
程序功能:*这里代表的是通配符,表示所有符号,如果输入参数为a或者b,会输出语句,其他输入都进入通配符的程序块
c
//类似C的switch case语句
case $变量 in
"第1个变量内容")
程序段
;; //表示该程序块结束!!
"第2个变量内容")
程序段;;
"第n个变量内容")
程序段
;;
esac
函数
c
function fname () {
//函数代码段
}
还支持传参:a b在这里是传递的参数,也就是C语言里面的实参
循环
while循环:
c
while [条件] //括号内的状态是判断式
do //循环开始
//循环代码段
done
//还有另外一种until do done,表示条件不成立的时候循环,条件成立以后就不循环了,写法如下:
until [条件]
do
//循环代码段
done
for循环:
c
for var in con1 con2 con3......
do
//循环代码段
done
for循环数值处理,写法
for((初始值; 限制值; 执行步长))
do
//循环代码段
done