【从零开始的嵌入式生活】LinuxC语言——shell脚本编程(1)

简介: 【从零开始的嵌入式生活】LinuxC语言——shell脚本编程(1)

文章目录

 前言

 shell编程-变量

     shell脚本的基础知识

          shell脚本的本质

          shell 编程的基本过程

     shell变量

          用户自定义变量

          位置变量

          常用shell环境变量

 shell编程-功能语句

     说明性语句(注释行)

     常用功能性语句(命令)

           read 读入数据

           expr命令 用于算数运算

           test语句 测试语句

 shell编程-分支语句

     条件语句

     多路分支语句

 shell编程-循环语句

     循环语句for的用法

     循环语句while的用法

     循环控制语句

 shell编程-函数

     shell函数调用

     函数变量作用域

 写在最后

shell编程-变量

shell脚本的基础知识

shell脚本的本质

语言的分类:解释性语言、编译型语言


shell脚本语言是解释型语言

shell脚本的本质:shell命令的有序集合

shell 编程的基本过程

建立shell文件

包含任意多行操作系统命令或shell命令的文本文件;一般以.sh结尾

赋予shell文件执行权限

用chmod命令修改权限;一般用chmod u+x就是读和执行权限。

执行shell文件

直接使用命令行调用shell程序

shell变量

shell允许用户建立变量存储数据,但不支持数据类型(整型、字符、浮点型),将任何赋给变量的值都解释为一串字符


Variable=value


等号两边一定不能加空格


count=1
echo $count
Datat


Bourne Shell有如下四种变量:


用户自定义变量

位置变量即命令行参数

预定义变量

环境变量

用户自定义变量

在shell编程中通常使用全大写变量,方便识别 $ COUNT=1

变量的调用:在变量前加$ $ echo $HOME

Linux Shell/bash从右向左赋值


$Y=y
$ X=$Y
$ echo $X 
y


使用unset命令删除变量的赋值 unset Z


位置变量

acb55f756bfcf53683c0a5daa4af417.png

常用shell环境变量

HOME: /etc/passwd文件中列出的用户主目录

IFS:Internal Field Separator, 默认为空格,tab及换行符

PATH :shell搜索路径

PS1,PS2:默认提示符($)及换行提示符(>)

TERM:终端类型,常用的有vt100,ansi,vt200,xterm等


shell编程-功能语句

说明性语句:

以#号开始到该行结束,不被解释执行

功能性语句:

任意的shell命令、用户程序或其它shell程序。

结构性语句:

条件测试语句、多路分支语句、循环语句、循环控制语句等。

说明性语句(注释行)

注释行可以出现在程序中的任何位置,既可以单独占用一行, 也可以接在执行语句的后面. 以#号开始到所在行的行尾部分,都不被解释执行. 例如:# 下面程序段的说明

但是:#! /bin/sh需要告诉编译器使用哪个shell


常用功能性语句(命令)

read 读入数据

read var

read var1 var2 var3

把读入行中的第一个单词(word)赋给var1, 第二个单词赋给var2, ……把其余所有的词赋给最后一个变量.

如果执行read语句时标准输入无数据, 则程序在此停留等侯, 直到数据的到来或被终止运行。

如果输入的时候希望和提示信息同一行可以:


使用sh用/c来实现

使用bash利用echo -n实现

expr命令 用于算数运算

expr  12  +  5  \*  3


算数运算的时候不能省略空格!!!

sum=`expr $num \\* 6 `

$变量名表示变量的值

但是给变量赋值的时候两边不可以加空格!!!


test语句 测试语句

测试的三种类型:


字符串

整数

文件属性

test "$answer" = "yes" #变量answer值是否是yes
test $num -eq 18 #判断num是否是整数18
test -d tmp #是否是一个目录


test的一些参数 (记不住。。学废了,没事回来看看吧0.0):


参数 使用 含义

字符串  

=     s1 = s2 测试字符串是否完全一样

!=    s1 != s2 测试两个字符串的内容是否有差异

-z      -z s1 测试s1字符串的长度是否为0

-n      -n s1 测试s1字符串的长度是否不为0

整数  

-eq    a -eq b 测试a与b是否相等

-ne   a -ne b 测试a与b是否不等

-gt   a -gt b 测试a是否大于b

-ge   a -ge b 测试a是否大于等于b

-lt    a -lt b 测试a是否小于b

-le    a -le b 测试a是否小于等于b

文件目录  

-d  -d name 测试name 是否为一个目录

-e  -e name 测试一个文件是否存在

-f  -f name 测试name 是否为普通文件

-L  -L name 测试name 是否为符号链接

-r  -r name 测试name 文件是否存在且为可读

-w  -w name 测试name 文件是否存在且为可写

-x  -x name 测试name 文件是否存在且为可执行

-s  -s name 测试name 文件是否存在且其长度不为0

-nt  f1 -nt f2 测试文件f1 是否比文件f2 更新

-ot  f1 -ot f2 测试文件f1 是否比文件f2 更旧

-o a -le b -o a -le 100 测试两个条件是否至少一个满足条件


相关文章
|
9月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
839 9
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
9月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
865 2
|
Shell
Shell脚本循环控制:shift、continue、break、exit指令
使用这些命令可以让你的Shell脚本像有生命一样动起来。正确使用它们,你的脚本就能像一场精心编排的舞蹈剧目,既有旋律的起伏,也有节奏的跳跃,最终以一场惊艳的表演结束。每一个动作、每一个转折点,都准确、优雅地完成所需要表达的逻辑。如此,你的脚本不只是冰冷的代码,它透过终端的界面,跳着有节奏的舞蹈,走进观众——使用者的心中。
404 60
|
9月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
11月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
1244 1
|
存储 Unix Shell
确定Shell脚本在操作系统中的具体位置方法。
这对于掌握Linux的文件系统组织结构和路径方面的理解很有帮助,是我们日常工作和学习中都可能使用到的知识。以上讲解详细清晰,应用简便,是每一个想要精通操作系统的计算机爱好者必备的实用技能。
681 17
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
2165 25
|
Linux Shell
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
399 4
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
664 3