【Linux】脚本shell script

shell是与Linux交互的基本工具

shell script是针对shell所写的脚本,解释执行,无需编译

注意事项

  1. 指令的执行是从上而下、从左而右的分析与执行; 
  2. 指令、选项与参数间的多个空白都会被忽略掉; 
  3. 空白行也将被忽略掉,并且[tab]按键的空白同样视为空格键; 
  4. 如果读取到一个Enter符号(CR),就尝试开始执行该行(或该串)命令; 
  5. 如果一行的内容太多,则可以使用[Enter]]来延伸至下一行; 
  6. [#]可做为注释!任何加在#后面的资料将全部被视为批注文字而被忽略!

执行

必须要具备可读可执行权限

直接命令执行

sudo chmod u+x test.sh
./test.sh

bash程序执行

shell名称 脚本名

将输入重定向到shell脚本

bash < 脚本名

内容

echo [-n -e]

-n:输出后不换行

-e:转义字符

#! /bin/bash
# author
# date: 2024-4-26
# function: the first sctiptecho "current time"
date
echo -n "env path:"$PATH
echo "current user name:`hzy`" 
echo "current work path:"
pwdexit 0

内嵌脚本

#! /bin/bash
# author
# date: 2024-4-26
# function: the first sctiptecho "test:"
. test.shexit 0

调试

bash -v 脚本名

绝对路径

相对路径

变量path功能

重定向输入:bash < 脚本名

变量

变量就是以一组文字或符号等,来替代一些设置或者是一串保留的数据Shell编程中变量是非类型性质的,不必指定变量是数字还是字符串都需要事先声明

局部变量

局部变量在脚本或命令中定义,仅在当前shel实例中有效,其他shel启动的程序不能访问局部变量。

环境变量

所有的程序,包括shel1启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行,必要的时候shel脚本也可以定义环境变量。(是系统的一部分,无需定义,如PATH)

内部变量

是由shell程序设置的特殊变量,在程序内这些变量无法修改($#、?)。 

$0:当前脚本名称

$n:传递给脚本或函数的参数,n表示第n个参数(下标从1开始)

$#:传递给脚本或函数的参数个数

$*:传递给脚本或函数的全部参数,把所有参数作为一个整体

$@:传递给脚本或函数的全部参数,把所有参数分开,分别传递

$?:上一个命令的退出状态,或者函数的返回值

$$:当前Shell进行的ID,对于脚本,就是脚本所在进程ID

变量赋值

w:=3

变量值读取

read [-ptn] variable1 variable2 variable3:将用户输入的数据分配给变量。

-p:提示用户输入数据,并在读取数据之前显示提示信息。

-t:设置超时时间,如果用户在指定的时间内没有输入数据,则返回失败。

-n:限制读取的字符数,只读取指定数量的字符。

例如

#!/bin/bashecho "请输入三个变量的值:"
read -p "variable1: " var1
read -p "variable2: " var2
read -p "variable3: " var3echo "您输入的变量值如下:"
echo "variable1: $var1"
echo "variable2: $var2"
echo "variable3: $var3"

替换变量

new_var=${old_var-content}:如果old_var不存在,content赋值给new_var

new_var=${old_var:-content}:为空也替换

new_var=${old_var:+content}:如果old_var是非空,content就赋值给new_var(与-号相反)

new_var=${old_var:?content}:如果old_var被删除或为空,将content输出到控制台

${w1:+${w3:=root}}表示如果变量$w1被定义且非空(即不为null或空字符串),则执行${w3:=root},否则返回null。

${w3:=root}表示如果变量$w3未被定义或为空,则将其赋值为字符串"root",否则保持其当前值不变

数组

bash只支持一维数组,没有限制大小。

下标由0开始。

数组名=(v1 v2 ... v3)(括号表示数组用空格分开)

单独定义:array[9]=0,无需定义数组,直接执行,除了已经定义的元素,其他为空(类似与字典,或者python的Counter())

读取数组:${array[1]},${array[*]}(数组所有元素),${array[@]}(数组所有元素),加#读取个数

表达式

只支持整数运算

算术运算符

expr 5 + 3#有空格val=`expr 5 + 3`#有空格val=$(expr 5 + 3)#有空格val=$[5+2]#无空格n=1
m=2
let val=$n+$m#无空格var=$((运算内容))#var=$((9+8))

关系运算符(逻辑表达式)

test 条件:判断

-eq:是否相等

-ne:不等

-gt:大于

-lt:小于

-ge:大于等于

-le:小于等于

test "abc"=="xyz"[ "abc" == "xyz" ]#要空格
[ "abc" -eq "xyz" ]#要空格

布尔运算符

逻辑表达式

cmd1 && cmd2:与运算

cmd1 || cmd2:或运算

[逻辑表达式1 -a 逻辑表达式2]

-a:与运算

-o:或运算

!:非运算

返回0是true,false为非零值

字符串运算符

test -z string:是否为空

test -n string:是否为0

test string1=string2:是否相等

test string1!=string2:是否不等

test string:是否为空

文件测试运算符

-e:文件是否存在

-f:文件是否存在且为普通文件

-d:文件是否存在且为目录

-r:是否存在且可读

-w:是否存在且可写

-x:是否存在且可执行

语句

if-then

if [condition]; then当条件成立时执行内容
fi#结束判断if [condition1]; then当条件成立1时执行内容
elif [condition2];then当条件成立2时执行内容
else当条件不成立时执行内容
fi

while

不满足条件,循环结束

while [condition]
do执行内容
done

until

满足条件,循环结束,与while相反

until [condition]
do执行内容
done

for

for val in arr
do执行内容
done

break

continue

exit

函数

函数可以在Shell脚本中做出一个类似自定义执行命令的东西
函数的设置一定要在程序的最前面
不但可以简化程序代码,还可以做成类似“模块”的东西
函数也是有内部变量的,函数名称为$0,后续参数为$1,$2...

[function] name()
{return
}#调用
name val1 val2 val3 ... valN#例子
#!/bin/bash# 定义一个函数,用于计算两个数的和
function add() {local num1=$1local num2=$2local sum=$((num1 + num2))echo "两数之和为: $sum"
}# 调用函数
add 3 5

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抽象工厂模式(AbstractFactoryPattern)

文章目录 1.抽象工厂模式定义2.UML类图3.抽象工厂模式具体实现工厂模式实现单一产品族抽象工厂实现多产品族产品类工厂类使用 4.抽象工厂模式优缺点 1.抽象工厂模式定义 提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定它们具体的类。 工厂方法模式是单一产…

2024电工杯B题食谱评价与优化模型思路代码论文分析

2024年电工杯数学建模竞赛B题论文和代码已完成&#xff0c;代码为B题全部问题的代码&#xff0c;论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解&#xff08;问题1模型的建立和求解、问题2模型的建立和求解、问题3模型的建立和求解&#xff09;、模型…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-17讲 定时器按键消抖

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

计算机网络安全控制技术

1.防火墙技术 防火墙技术是近年来维护网络安全最重要的手段&#xff0c;但是防火墙不是万能的&#xff0c;需要配合其他安全措施来协同 2.加密技术 目前加密技术主要有两大类&#xff1a;对称加密和非对称加密 3.用户识别技术 核心是识别网络者是否是属于系统的合法用户 …

【设计模式深度剖析】【1】【结构型】【代理模式】| 玩游戏打怪、升级为例加深理解

&#x1f448;️上一篇:创建型设计模式对比 | 下一篇:装饰器模式&#x1f449;️ 目 录 代理模式定义英文原话直译如何理解&#xff1f; 3个角色UML类图1. 抽象主题&#xff08;Subject&#xff09;角色2. 代理类&#xff1a;代理主题&#xff08;Proxy Subject&#xff0…

UE5 OnlineSubsystem Steam创建会话失败解决方法

连接上Steam但是创建会话失败 解决方法 在DefaultEngine.ini中加上bInitServerOnClienttrue,这个其实在官方文档里用注释给出了&#xff0c;直接取消注释就行 删除项目目录中的Saved、Internmediate、Binaries目录 右键你的项目.uproject选择Generate Visual Studio project f…

ASP.Net MVC在控制台添加视图时没有模型类并且不能添加视图

情况如下&#xff1a; 解决方法&#xff1a; 1.查看vs能否创建asp.net mvc项目&#xff0c;这种情况一般是更换了vs打开老项目 2.点击跳转至修改安装选项界面 3.选择安装项即可 如果以上都有&#xff1a; 看看你的视图文件是否存在在项目中 也不能点击添加&#xff0c;如果…

探索数值分析的奥秘:掌握NumPy与Pandas基础

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、NumPy&#xff1a;数值计算的效率提升器 二、Pandas&#xff1a;数据处理与分析的利器 …

Linux文本三剑客之sed

set的定义&#xff1a; sed是一种流编辑器&#xff0c;流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可以根据命令来处理数据流中的数据&#xff0c;这些命令要么从命令行中输入&#xff0c;要么存储在一个命令文本文件中。 sed的执行过程&a…

Nextjs 动态路由获取参数

目录 一、创建page目录下的路由文件 二、通过useRouter来获取动态参数 先看官方文档&#xff1a;Routing: Dynamic Routes | Next.js 使用Nextjs13版本参考官方文档后实现仍有问题&#xff0c;网上的材料大多和官网一致&#xff0c;经过测试后&#xff0c;我找到了这个解决方…

【日记】今天好困(407 字)

正文 4T 硬盘降价了&#xff0c;好心动。虽然只降了 10 块钱……. 为什么硬盘这么贵啊&#xff01;哼。 柜面上杂事好多。虽然一天到晚见不到几个客户&#xff0c;但杂事就是很多。一个头两个大。也不知道从哪儿冒出来的这么多事。 芒果干到了&#xff01;还没去取&#xff0c;…

sql把一个表的某几列的数据存到另一个表里

一.如何用slq语句把一个表中的某几个字段的数据插入到另一个新表中&#xff0c;就要用下面这条slq语句&#xff1a; insert into 表名1(字段1,字段2) select 字段1,字段2 from 表名2 这里有一点值得注意的是这2个字段要一一对应&#xff0c;并且按顺序。 二.如果另一个表是…

JAVASE之类和对象(1)

路虽远&#xff0c;行则将至&#xff1b;事虽难&#xff0c;做则必成。 主页&#xff1a;趋早——Step 专栏&#xff1a;JAVASE gitte&#xff1a;https://gitee.com/good-thg 引言&#xff1a; 这篇文章我们只介绍前半部分&#xff0c;下一篇文章会介绍剩下的部分。 目录 一、…

LeetCode 面试150

最近准备面试&#xff0c;我以前不愿意面对的 现在保持一颗本心&#xff0c;就是专注于算法思想&#xff0c;语言基础的磨炼&#xff1b; 不为速成&#xff0c;不急功近利的想要比赛&#xff0c;或者为了面试。 单纯的本心&#xff0c;体验算法带来的快乐&#xff0c;是一件非常…

Python操作MySQL数据库的工具--sqlalchemy

文章目录 一、pymysql和sqlalchemy的区别二、sqlalchemy的详细使用1.安装库2.核心思想3.整体思路4.sqlalchemy需要连接数据库5.使用步骤1.手动提前创建数据库2.使用代码创建数据表3.用代码操作数据表3.1 增加数据3.2 查询数据3.3 删除数据3.4 修改数据 一、pymysql和sqlalchemy…

2025秋招深度学习基础面试题(一)

01. 卷积和BN如何融合提升推理速度 Conv和BN的融合:在网络的推理阶段,可以将BN层的运算融合到Conv层中,减少运算量,加速推理。本质上是修改了卷积核的参数,在不增加Conv层计算量的同时,略去了BN层的计算量。def fuse_conv_bn(conv, bn):std = (bn.running_var + bn.eps).…

数据仓库、数据中台、大数据平台之间的关系

数据行业经常会出现数据仓库、数据中台、大数据平台等概念&#xff0c;容易产生疑问&#xff0c;它们中间是相等&#xff0c;还是包含的关系&#xff1f; 数据中台和数据仓库概念的关系 数据中台概念是包含数据仓库的&#xff0c;数据仓库是数据中台中的一部分&#xff0c;包含…

探索Facebook:数字社交的新时代

Facebook&#xff0c;作为全球最大的社交网络平台之一&#xff0c;一直在引领着数字社交的发展潮流。随着科技的不断进步和社会的不断变迁&#xff0c;Facebook也在不断演进和创新&#xff0c;迎接着数字社交的新时代。本文将探索Facebook在数字社交领域的新发展&#xff0c;以…

Behind the Code:Polkadot 如何重塑 Web3 未来

2024 年 5 月 17 日 Polkadot 生态 Behind the Code 第二季第一集 《创造 Web3 的未来》正式上线。第一集深入探讨了 Polkadot 和 Web3 技术在解决数字身份、数据所有权和去中心化治理方面的巨大潜力。 &#x1f50d; 查看完整视频&#xff1a; https://youtu.be/_gP-M5nUidc?…

抖音视频怎么去水印保存部分源码|短视频爬虫提取收集下载工具

抖音视频怎么去水印保存部分源码|短视频爬虫提取收集下载工具 抖音视频去水印保存部分源码&#xff1a; 通过使用Python中的requests、re和os等库&#xff0c;可以编写如下代码来实现抖音视频去水印保存的功能。 短视频爬虫提取手机下载工具的使用方法&#xff1a; 该工具主…