linux sh脚本编写

linux中bash

Shell 是 Linux 的核心部分,它允许你使用各种诸如 cd、ls、cat 等的命令与 Linux 内核进行交互。Bash脚本和Shell脚本实际上是指同一种类型的脚本,只不过Bash是其中最常用的一种Shell。除了Bash之外,常见的Shell解释器还有C Shell (csh)、Korn Shell (ksh)、Z Shell (zsh)等。

Bash是一种Unix shell,Bash是Bourne Again SHell的缩写。用于与操作系统进行交互,执行命令和脚本,以及管理文件和目录。用于自动化任务、批处理操作、系统管理、软件开发等各种用途。

命名:后缀名为.sh代表是一个shell脚本文件

#!/bin/bash

这一行被称为shebang 行,在某些文献中,它被称为hashbang 行,这是因为它以两个字符hash ‘#’ 和bang ‘!’ 开头。

#!/bin/sh (必须放在文件的第一行)

符号#!用来告诉系统它后面的参数是用来执行该文件的程序

注释

在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。

启动脚本

一种是将文件名作为shell命令的参数

调用格式为: bash 脚本名称.sh

特点: 文件无需可执行权限

当要被执行的脚本文件没有可执行权限时,只能使用这种调用方式。

当前shell是父进程,生成一个子shell进程,在子shell中执行脚本。脚本执行完毕,退出子shell,回到当前shell。

第二种办法: ./+文件名执行

注意:需要注意文件以及用户是否拥有可执行权限。

当前shell是父进程,生成一个子shell进程,在子shell中执行脚本。脚本执行完毕,退出子shell,回到当前shell。和第一种办法等效。

延伸:

source

使用source script.sh方式,在当前上下文中执行脚本,不会生成新的进程,执行完毕,回到当前shell。source方式也叫点命令,. script.sh与source script.sh等效。注意在点命令中,.与script.sh之间有一个空格。

exec

使用exec command方式,会用command进程替换当前shell进程,并且保持PID不变。执行完毕,直接退出,不回到之前的shell环境。

变量

在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写:变量名=值

取出变量值可以加一个美元符号($)在变量前面

定义变量有以下几点需要注意

(1)变量名可以包含_、数字、大小写字母,但不能以数字开头

(2)“=”两边不要有空格

(3)“值”如果含有空格,要使用单引号''或双引号""引起来

(4)定义变量时,变量名前是不需要加$的,引用变量时需要在变量名前加$

通过read命令来获取变量

read ‐p "提示信息" 变量

当遇到read命令时,系统会等待用户输入,用户所输入的值会赋值给read后面的变量。

[root@redhat8 yy]# read -p "请输入你的名字:" aa

请输入你的名字:jin

[root@redhat8 yy]# echo $aa

jin

[root@redhat8 yy]#

环境变量

在定义环境变量时,前面加上export 即可。

常用的环境变量

PATH

PATH环境变量定义了系统在哪些目录中查找可执行文件

HOSTNAME

服务器的主机名。

SHELL

用户当前使用的Shell解析器。

HISTSIZE

保存历史命令的数目。

USER

当前登录用户的用户名。

HOME

当前登录用户的主目录。

PWD

当前工作目录。

LD_LIBRARY_PATH

C/c++动态链接库文件搜索的目录

CLASSPATH

JAVA语言库文件搜索的目录

向 Bash 脚本传递参数

在运行 Bash 脚本时以以下方式传递参数.

./my_script.sh   arg1   arg2

参数详解

$0 对应的是当前 Shell 脚本程序的名称

$# 对应的是总共有几个参数(参数个数)

$* 对应的是所有位置的参数值

$? 对应的是显示上一次命令的执行返回值

$N对应的是第 N 个位置的参数值

通配符

通配符一般用在shell语言中,通配符中常见的元字符如下:

(1)[]:匹配一个字符,匹配的是出现在中括号中的字符

(2)[abc]:匹配一个字符,且只能是a或b或c

(3)[a-z]:“-”有特殊意义,表示“到”的意思,这里表示a~z,即匹配任一字母

(4)[0-9]:表示匹配任一数字

如果想去除含有特殊意义的字符,前面加“\”表示转义,即去除此字符的特殊意义

(5)[a\-z]:这里的“-”就没有“到”的意思了,匹配的是“a”或“-”或“z”这三个中的一个

如果想表示“除了”的意思,则在第一个中括号后面加“!”或“^”

(6)[!a-z]、[^a-z]:表示除字母外的其他字符

(7)?:表示一个任意字符,这里强调是一个,不是0个也不是多个,但不能匹配表示隐藏文件的点

(8)*:表示任意多个任意字符,可以是0个,也可以是1个或多个,但不能匹配表示隐藏文件的点

基础字符串操作
获取字符串长度

${#string}

var="hello world"

echo ${var}

echo ${#var}   

连接两个字符串

str3=$str1$str2

                 

常用命令语法及功能

cat file.txt: 输出文件内容到标准输出设备(屏幕)上

find: 搜索文件比如:根据文件名搜索find . -name filename -print

流程控制

“if” 表达式 如果条件为真则执行then后面的部分

if ....; then

....

elif ....; then

....

else

....

Fi

条件测试语句

Shell 脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字 0,否则便返回其他随机数值。

条件测试语法的执行格式:

[ condition ]

注意:条件表达式两边均应有一个空格。

文件测试语句

文件测试即使用指定条件来判断文件是否存在或权限是否满足等情况的运算符。

运算符

作用

-d

测试文件是否为目录类型

-e

测试文件是否存在

-f

判断是否为一般文件

-r

测试当前用户是否有权限读取

-w

测试当前用户是否有权限写入

-x

测试当前用户是否有权限执行

逻辑测试语句

逻辑语句用于对测试结果进行逻辑分析,根据测试结果可实现不同的效果.

逻辑“与”的运算符号是&&,它表示当前面的命令执行成功后才会执行它后面的命令.

逻辑“或”的运算符号为||,表示当前面的命令执行失败后才会执行它后面的命令。

运算符号是一个叹号(!),它表示把条件测试中的判断结果取相反值。

整数值比较语句

整数比较运算符仅是对数字的操作,不能将数字与字符串、文件等内容一起操作,而且不能想当然地使用日常生活中的等号、大于号、小于号等来判断。因为等号与赋值命令符冲突,大于号和小于号分别与输出重定向命令符和输入重定向命令符冲突。

运算符

作用

-eq   equal

是否等于

-ne     not equal

是否不等于

-gt     greater than

是否大于

-lt    lower than

是否小于

-le     lower equal

是否等于或小于

-ge    greater than

是否大于或等于

字符串比较语句

字符串比较语句用于判断测试字符串是否为空值,或两个字符串是否相同。它经常用来判断某个变量是否未被定义(即内容为空值)。

运算符

作用

=

比较字符串内容是否相同

!=

比较字符串内容是否不同

-z

判断字符串内容是否为空

流程控制语句

if 语句分为单分支结构、双分支结构、多分支结构。

单分支结构

单分支结构由 if、then、fi 关键词组成,而且只在条件成立后才执行预设的命令。

if condition

then ...

Fi

双分支结构

if 条件语句的双分支结构由 if、then、else、fi 关键词组成,它进行一次条件匹配判断, 如果与条件匹配,则去执行相应的预设命令;反之则去执行不匹配时的预设命令

如:

if condition

then ...

else ...

Fi

多分支结构

if 条件语句的多分支结构由if、then、else、elif、fi 关键词组成,它进行多次条件匹配判断,这多次判断中的任何一项在匹配成功后都会执行相应的预设命令。

if condition1

then ...

elif condition2

then ...

else ...

Fi

for 条件循环语句

for x in xx

do...

done

while 条件循环语句

while condition

do ...

done

将 shell 脚本添加到 PATH

前面使用 ./test.sh 来运行脚本;如果省略前导 ./; ./ 代表当前目录

Bash 认为你正在尝试运行名为 scripts.sh 的命令。当你在终端上运行任何命令时,shell 就在存储在 PATH 变量中的一组目录中查找该命令.

所以需要export PATH=$PATH:/包含test.sh的目录

使用函数

function_name() {

  commands

}

使用带参数的函数的 Bash 脚本样例

#!/bin/bash

sum() {

    sum=$(($1+$2))

    echo "The sum of $1 and $2 is: $sum"

}

echo "Let's use the sum function"

sum 1 5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/481011.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Django框架学习笔记】超详细的Python后端开发Django框架学习笔记

十二,Django框架 可以以下链接获取Django框架学习笔记,md文档和pdf文档 Django框架超详细的学习笔记,点击我获取 12.1 命令行操作 # 创建django项目 django-admin startproject aini# 启动项目 cd /mysite python3 manage.py runserver## 创建应用 …

BUUCTF---WEEK3(Rabin‘s RSA)

题目: from Crypto.Util.number import * from secret import flag p getPrime(64) q getPrime(64) assert p % 4 3 assert q % 4 3n p * qe 2 m bytes_to_long(flag)c pow(m,e,n)print(n , n) print(c , c)# n 201354090531918389422241515534761536573 …

MySQL面试题--事务

目录 1.什么是数据库事务?事务的特性是什么? 2.什么是ACID? 3.并发事务会有哪些问题? 4.什么是 脏读、丢失修改、不可重复读、幻读 5.不可重复读和幻读有什么区别? 6.Mysql是如何避免事务并发问题的? …

加一——大数据的应用

题目链接:66. 加一 - 力扣(LeetCode) 解题思路: 先将输入的数组转换成整数,对整数进行加一操作,然后再转换回数组,这样就不用考虑加一进位和数位增加的问题,很简单的思路但是运行时间…

操作简单的城市内涝一维二维耦合模拟软件

原文链接:最简单的城市内涝一维二维耦合模拟软件https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247598401&idx3&sn0c4c86b3a5d09a75b8f07e6fad81aa9c&chksmfa8200a6cdf589b0970a6854869e8e3a9f132fe40a19977863c091cbcf6d9786f067e0c5651e&…

UE5 GameMode C++函数 学习

已经尝试,确实能重启游戏 类描述符加了noplaceable过后即使是Actor也不能放到场景中了,关卡蓝图,GameMode,GameState这些就不能放场景中了 UFUNCTION(exec)

【Python + Django】表结构创建

以员工管理系统为例。 事前呢,我们先把项目和app创建出来,详细步骤可以看我同栏目的第一篇、第二篇文章。 我知道你们是不会下来找的,就把链接贴在下面吧: 【Python Django】启动简单的文本页面-CSDN博客 【Python Django】…

优维全面可观测产品能力分解⑥:运维状态可观测

本文是《优维全面可观测产品能力分解》系列文章的第六篇:『运维状态可观测』。基于可观测的数据体系,「运维状态可观测」是实现于运维状态的一次深入可观测。 在日常运维场景中,系统/应用运维人员重点关注的是系统/应用是否可用,…

大数据开发扩展shell--尚硅谷shell笔记

大数据开发扩展shell 学习目标 1 熟悉shell脚本的原理和使用 2 熟悉shell的编程语法 第一节 Shell概述 1)Linux提供的Shell解析器有: [atguiguhadoop101 ~]$ cat /etc/shells /bin/sh/bin/bash/sbin/nologin/bin/dash/bin/tcsh/bin/csh2&#xff09…

男性三十三岁,头晕头疼,心慌和后背发紧,竟被它治好了!

植物神经紊乱是一种影响现代人健康的常见问题,它源于植物神经系统功能失调,导致身心健康出现一系列不适症状。植物神经紊乱对身体健康的影响是多方面的,它可能导致睡眠问题、情绪波动和自律神经功能紊乱等多种不适症状,严重影响个…

深度学习,CRNN+CTC和Attention OCR你更青睐哪一种?

深度学习在OCR领域的应用已经取得了瞩目的成果,而选择合适的算法对于提升OCR的识别准确率至关重要。在众多算法中,CRNN和Attention OCR犹如两颗璀璨的明珠,备受瞩目。 CRNN,这位结合了卷积神经网络(CNN)和…

如何在 iPad 上恢复已删除的历史记录?

iPad 配备了一个名为 Safari 的内置网络浏览器。这是一种在旅途中保持联系和浏览网页的强大且便捷的方式。但如果您不小心删除了浏览历史记录,则尝试恢复它可能会很令人沮丧。 幸运的是,您可以通过多种方法在 iPad 上恢复已删除的 Safari 历史记录。您应…

【自然语言处理七-经典论文-attention is all you need】

然语言处理七-经典论文-attention is all you need 摘要原文译文小结 1:引言原文译文小结 2:背景原文译文小结 3:模型架构原文译文小结 3.1 编码器和解码器原文译文小结 3.2 注意力原文译文小结3.2.1 缩放点积注意力原文总结 3.2.2 多头注意力…

计算机网络——数据链路层(数据链路层功能概述)

计算机网络——数据链路层(数据链路层功能概述) 数据链路层的功能数据链路层的基本概念封装成帧和透明传输 我们之前已经学完了物理层的所有内容,今天开始我们要进入数据链路层的学习,如果有小伙伴对物理层的内容感兴趣的话&#…

【Web】记录巅峰极客2023 BabyURL题目复现——Jackson原生链

目录 前言 分析 EXP SignedObject打二次反序列化 打TemplatesImpl加载恶意字节码 前文:【Web】浅聊Jackson序列化getter的利用——POJONode 前言 题目环境:2023巅峰极客 BabyURL 之前AliyunCTF Bypassit I这题考查了这样一条链子: BadAttributeV…

C语言 自定义类型:结构体

目录 前言 一、结构体类型 1.1 结构体的声明 1.2 结构体变量的创建和初始化 1.3 结构体的特殊声明 1.4 结构体的自引用 二、结构体的对齐 2.1 对齐规则 2.2 内存对齐的原因 2.3 修改默认对齐数 2.4 结构体传参 三、结构体实现位段 3.1 位段的内存分配 3.2 段的跨平…

39 openlayers 对接地图图层 绘制点线面圆

前言 这里主要是展示一下 openlayers 的一个基础的使用 主要是设计 接入地图服务器的 卫星地图, 普通的二维地图, 增加地区标记 增加 省市区县 的边界标记 基础绘制 点线面园 等等 测试用例 <template><div style"width: 1920px; height:1080px;" &g…

软考高级:软件架构评估概述和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

计算机网络:分层体系结构

计算机网络&#xff1a;分层体系结构 基本分层概述各层次的任务物理层数据链路层网络层运输层应用层 数据传递过程分层体系常见概念实体协议服务 基本分层概述 为了使不同体系结构的计算机网络都能互联&#xff0c;国际标准化组织于 1977 年成立了专门机构研究该问题。不久他们…

鸿蒙一次开发,多端部署(十一)交互归一

对于不同类型的智能设备&#xff0c;用户可能有不同的交互方式&#xff0c;如通过触摸屏、鼠标、触控板等。如果针对不同的交互方式单独做适配&#xff0c;会增加开发工作量同时产生大量重复代码。为解决这一问题&#xff0c;我们统一了各种交互方式的API&#xff0c;即实现了交…