【从零开始的嵌入式生活】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 测试两个条件是否至少一个满足条件


相关文章
|
30天前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
72 1
|
2月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
16天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
38 2
6种方法打造出色的Shell脚本
|
2天前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
12 1
|
7天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
21 2
|
1月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
61 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
21天前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
42 6
|
17天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
1月前
|
存储 移动开发 网络协议
【实战指南】从零构建嵌入式远程Shell,提升跨地域协作效率(2)
本文《从零构建嵌入式远程Shell》的第二部分,介绍了如何通过模块化设计和功能增强来优化远程Shell,包括支持阻塞命令、增加用户主动结束Shell进程的能力等,提升了跨地域协作效率。文中提供了详细的代码示例和验证步骤,适合开发者深入学习。
44 5
|
1月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
62 12