Linux嵌入式学习之Ubuntu入门(六)shell脚本详解

系列文章内容

Linux嵌入式学习之Ubuntu入门(一)基本命令、软件安装、文件结构、编辑器介绍

Linux嵌入式学习之Ubuntu入门(二)磁盘文件介绍及分区、格式化等

Linux嵌入式学习之Ubuntu入门(三)用户、用户组及文件权限

Linux嵌入式学习之Ubuntu入门(四)Makefile

Linux嵌入式学习之Ubuntu入门(五)汇编语法学习

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


相关推荐
懒狗跑ai的程序员Brain12 分钟前
如何利用粒子系统在unity制作一个烟花(粒子系统学习向)
学习·unity·游戏引擎
qetfw13 分钟前
CentOS 7 vsftpd.conf 配置文件详解:监听、用户、权限、被动模式与 TLS
linux·运维·centos·ftp·vsftpd
念何架构之路18 分钟前
moby-BuildKit(builder-next)
学习·docker·容器
风曦Kisaki22 分钟前
Kubernetes(K8s)笔记Day04:控制器(ReplicaSet 与Deployment),滚动更新及回滚,滚动更新策略,Pod 的 DNS 策略
linux·运维·笔记·docker·容器·kubernetes
code_whiter22 分钟前
初阶linux2环境基础开发工具完整教程
linux
惠惠软件23 分钟前
快速生成磁盘目录文件-双击运行a.bat ,可以看到磁盘目录下出现了 文件目录.txt-供大家学习研究参考
windows·学习·文件列表
星恒随风24 分钟前
C++ STL 详解:set 与 multiset 的使用、区间查询和算法应用
开发语言·c++·笔记·学习·算法
m4Rk_27 分钟前
【论文阅读】Agent 记忆机制(20):RecMem——只在信息反复出现时进行长期记忆巩固
论文阅读·人工智能·学习·开源·github
AmazingEgg28 分钟前
RHCSA 第三天学习笔记
linux
数聚天成DeepSData32 分钟前
外贸海关进出口数据去哪免费下载?从统计到明细的查找指南
linux·服务器·开发语言·前端·网络·人工智能·自然语言处理