【Shell】基础语法(二)

文章目录

  • 一、Shell基本语法
    • 文件名代换
    • 命令代换
    • 算术代换
    • 转义字符
    • 引号
  • 二、Shell脚本语法
    • 条件测试
    • 分支结构
    • 循环
  • 三、总结


一、Shell基本语法

文件名代换

用于匹配的字符称为通配符(Wildcard),如:* ? [ ] 具体如下:

  • *: 匹配0个或多个任意字符

在这里插入图片描述

  • ?:匹配一个任意字符

在这里插入图片描述

  • [ ]:匹配方括号中任意一个字符的一次出现

在这里插入图片描述

代换成功的前提是文件必须存在,如果文件不存在,则带换不了。

参数扩展:

  • touch {1, 2, 3, 4} / touch{1..4}.txt

在这里插入图片描述


命令代换

执行某一条命令,将这个命令的标准输出的内容存到某个变量中。

varname=cmd arg1 arg2 ...
varname=$(date)

#!/bin/bash 
DateTime=`date`
echo "DateTime is " $DateTime 

在这里插入图片描述

获取当前脚本所在路径:

#获取当前脚本所在路径 ,在这个路径touch一个1.txt
curPath=$(cd `dirname $0`;pwd)
touch $curPath/1.txt

在这里插入图片描述


算术代换

做最基本的整数运算

var=45
var2=2
echo $[var+3]
echo $((var+3))
echo $((var*var2))
echo $(($var*$var2))
# 将10以八进制来解析,最后得到的是10进制的8,最后再加11等于19
echo $[8#10+11]

在这里插入图片描述


转义字符

和C语言类似,\在Shell中被用作转义字符,用于去除紧跟其后的单个字符的特殊意义(回车除外),换句话说,紧跟其后的字符取字面值。例如:

在这里插入图片描述

引号

单引号:

和C语言不同,Shell脚本中的单引号和双引号都是字符串的界定符,而不是字符的界定符。单引号用于保持引号内所有字符的字面值,即使引号内的\和回车也不例外,但是字符串中不能出现单引号。如果引号没有配对就输入回车,Shell会给出续行提示符,要求用户把引号配上对。例如:

在这里插入图片描述在这里插入图片描述

双引号:

被双引号括住的内容,将被视为单一字串。它防止通配符扩展,但允许变量扩展。这点与单引号的处理方式不同。

在这里插入图片描述

当我们使用变量之前,如果变量是作为一个参数来传递的,应该习惯性的加双引号,防止变量中有空格。


二、Shell脚本语法

条件测试

shell中如何表示真假?直接使用某条命令的返回状态来判断真假——main函数的返回值 。我们知道,在main函数中,0表示正常返回,非0表示非正常返回。跟C语言是相反的。

我们可以通过$?,来获取上一条命令的返回状态。

在这里插入图片描述

条件测试的命令: test 表达式 / [ 表达式 ]

  • ( EXPRESSION ) 测试该表达式是否为真
  • ! EXPRESSION 取反
  • EXPRESSION1 -a EXPRESSION2 逻辑与
  • EXPRESSION1 -o EXPRESSION2 逻辑或
  • -n STRING 判断字符串不是空串
  • -z STRING 判断字符串长度为0
  • STRING1 = STRING2 判断字符串相等
  • STRING1 != STRING2 判断字符串不等
  • INTEGER1 -eq INTEGER2 判断整数相等
  • INTEGER1 -ge INTEGER2 判断整数1>=整数2
  • INTEGER1 -gt INTEGER2 判断整数1>整数2
  • INTEGER1 -le INTEGER2 判断整数1<=整数2
  • INTEGER1 -lt INTEGER2 判断整数1<整数2
  • INTEGER1 -ne INTEGER2 判断整数1!=整数2
  • FILE1 -nt FILE2 判断文件1比文件2新(指最后修改时间)
  • FILE1 -ot FILE2 判断文件1比文件2旧
  • -b FILE 块设备
  • -c FILE 字符设备
  • -d FILE 判断是否目录
  • -e FILE 单纯判断文件是否存在
  • -f FILE 判断文件是一个普通文件
  • -h FILE / -L FILE 判断是否一个符号链接
  • -k FILE 判断文件的粘着位是否被设置
  • -p FILE 判断文件是否是一个命名管道
  • -r FILE 判断文件是否有读权限
  • -s FILE 判断文件存在并且大小大于0字节
  • -S FILE 判断文件是否是一个socket文件
  • -t FD 判断某个文件描述符被终端打开
  • -w FILE 判断是否有写权限
  • -x FILE 有执行权限

分支结构

和C语言类似,在Shell中用if、then、elif、else、fi这几条命令实现分支控制。

#!/bin/bash
if [ -f /bin/bash ] # 判断bash文件是不是一个普通文件
then echo "/bin/bash is a file"
else echo "/bin/bash is NOT a file"
fi

在这里插入图片描述

:”是一个特殊的命令,称为空命令,该命令不做任何事,但Exit Status总是真。

#!/bin/bash
if false
then: 
elseecho "always false"
fi

在这里插入图片描述

#!/bin/bash
echo "Is it morning? Please answer yes or no!"
#读取用户输入的一个变量
read YES_OR_NO
if [ "$YES_OR_NO" = "yes" ]
thenecho "Good morning"
elif [ "$YES_OR_NO" = "no" ] ; thenecho "Good afternoon"
elseecho "Not recognized":
fi

在这里插入图片描述

除此之外,Shell还提供了&&和||语法,和C语言类似,具有Short-circuit特性。

分支结构:

case 表达式 in
val1|pattern1)xxxxxx;;
val2|pattern2)xxxxxx;;
*)xxxx;;
esac     #将case倒着写
#!/bin/bash
echo "Is it morning? Please answer yes or no!"
#读取用户输入的一个变量
read YES_OR_NOcase "$YES_OR_NO" in
yes|y|Yes|YES)echo "Good morning";;
[nN][oO])echo "Good afternoon";;
*)echo "Not recognized";;
esac

在这里插入图片描述


循环

for循环的遍历方式:

for varname in 列表 ; do  #do可以单独写一行,如果写在for这一样就要分号.....echo $varname
done控制循环次数
for i in {1..100}
do...
done遍历目录
for i in `ls`
do....
done
for FRUIT in apple banana pear
do echo "I like $FRUIT"
done

在这里插入图片描述

# 计算从1加到100的值,使用for循环
sum=0
for i in {1..100}
do sum=$[$sum+$i]
done
echo $sum

在这里插入图片描述


# 遍历当前目录,看当前目录中的普通文件和目录
for f in `ls`
do if [ -f "$f" ]thenecho "$f 是一个文件"elif [ -d "$f" ]then  echo "$f 是一个目录"else echo "Not recognized"fi
done

在这里插入图片描述

while循环的遍历方式

while 命令|条件测试
doxxxx
donebreak 和 continue 跟C中的一样
echo "Please input paswd"
sum=1
read try
while [ "$try" != "secret" ]
do if [ "$sum" -ge 5 ]then echo"Error 5 times, exit"breakfi echo "Sorry, try again!"read try sum=$[$sum+1]
done

三、总结

Shell就是命令行工具的胶水,没有任何语言能像Shell一样方便地将一大堆命令行工具组合起来。原则上来说,Shell做什么都可以,但显然它最适合的是自动化,因为只需要将你原来手动敲的命令都复制到一个文件里面就行了。好了,我们下期见!

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

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

相关文章

mysql 数据库引擎介绍

一、数据库引擎 数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务&#xff0c;从而满足企业内大多数需要处理大量数据的应用程序的要求。 使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库。这包括创建用于存储…

分布式事务

事务是用户定义的一系列的数据库操作&#xff0c;这些操作可以视为一个完整的逻辑处理工作单元&#xff0c;要么全部成功&#xff08;全部执行&#xff09;&#xff0c;要么全部失败&#xff08;全都不执行&#xff09;&#xff0c;是不可分割的工作单元 分布式事务是指会涉及…

[NOIP2007 普及组] 纪念品分组

[NOIP2007 普及组] 纪念品分组 题目描述 元旦快到了&#xff0c;校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得 的纪念品价值相对均衡&#xff0c;他要把购来的纪念品根据价格进行分组&#xff0c;但每组最多只能包括两件纪念品&#xff0c; 并且…

17、YML配置文件及让springboot启动时加载我们自定义的yml配置文件的几种方式

YML配置文件及加载自定义配置文件的几种方式 ★ YAML配置文件 其实本质和.properties文件的是一样的。 Spring Boot默认使用SnakeYml工具来处理YAML配置文件&#xff0c;SnakeYml工具默认就会被spring-boot-starter导入&#xff0c;因此无需开发者做任何额外配置。 YAML本质…

ip网络广播系统网络音频解码终端公共广播SV-7101

SV-7101V网络音频终端产品简介 网络广播终端SV-7101V&#xff0c;接收网络音频流&#xff0c;实时解码播放。本设备只有网络广播功能&#xff0c;是一款简单的网络广播终端。提供一路线路输出接功放或有源音箱。 产品特点 ■ 提供固件网络远程升级■ 标准RJ45网络接口&…

安装Win10操作系统时找不到任何驱动器的解决方法

安装Win10操作系统时找不到任何驱动器的解决方法 有时候在一台新电脑上使用U盘安装系统时提示&#xff1a;我们找不到任何驱动器。 如下图所示&#xff1a; 解决方法&#xff1a; 一、按F12&#xff08;不同电脑进入Bios的按键可能不同&#xff09;将电脑进入Bios画面&#x…

MySQL 的事件调度器

MySQL 的事件调度器可以通过以下方式进行管理&#xff1a; 1】查看事件调度器的状态 SHOW VARIABLES LIKE event_scheduler;2】启用/禁用事件调度器 SET GLOBAL event_scheduler ON;SET GLOBAL event_scheduler OFF; 注意&#xff1a;启用/禁用事件调度器需要具有 SUPE…

处理nacos、tomcat、nginx日志增长过快问题

1.nacos日志清理 修改nacos-logback.xml 将日志级别改为error级&#xff0c;减少info级日志产生量 将<maxHistory>调整为2以下&#xff0c;将 <totalSizeCap>调整为2GB左右 比如&#xff1a; [rootiZ0jlapur4hqjezy8waee0Z logs]# ll -h total 2.1G -rw-r--r-…

【Spring Boot】Thymeleaf模板引擎 — 表达式的语法

表达式的语法 模板的主要作用是将后台返回的数据渲染到HTML中。那么Thymeleaf是如何解析后台数据的呢&#xff1f;接下来从变量、方法、条件判断、循环、运算&#xff08;逻辑运算、布尔运算、比较运算、条件运算&#xff09;方面学习Thymeleaf表达式支持的语法。 1.赋值和拼…

RPC框架引入zookeeper服务注册与服务发现

Zookeeper概念及其作用 ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是大数据生态中的重要组件。它是集群的管理者&#xff0c;监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理…

使用 LangChain 搭建基于 Amazon DynamoDB 的大语言模型应用

LangChain 是一个旨在简化使用大型语言模型创建应用程序的框架。作为语言模型集成框架&#xff0c;在这个应用场景中&#xff0c;LangChain 将与 Amazon DynamoDB 紧密结合&#xff0c;构建一个完整的基于大语言模型的聊天应用。 本次活动&#xff0c;我们特意邀请了亚马逊云科…

git 版本管理工具 学习笔记

git 学习笔记 目录 一、git是什么 二、创建仓库 三、工作区域和文件状态 四、添加和提交文件 五、回退版本 &#xff08;了解&#xff09; 六、查看差异 七、删除文件 八、.gitignore文件&#xff08;了解&#xff09; 九、github ssh-key配置 十、本地仓库和远程仓库内…

C++ STL vector

目录 一.认识vector 二.vector的使用 1.vector的构造函数 2.vector的迭代器 2.1 begin&#xff08;&#xff09;&#xff0c;end&#xff08;&#xff09; 2.2 rbegin&#xff08;&#xff09;&#xff0c;rend&#xff08;&#xff09; 2.3 迭代器初始化对象 3. vector…

pp-ocr报错记录

RESER 报错&#xff1a; distutils.errors.DistutilsError: Could not find suitable distribution for Requirement.parse(‘tomli>1.0.0’) 解决办法&#xff1a; 参考&#xff1a;https://stackoverflow.com/questions/67603407/distutilserror-could-not-find-suitable…

网络编程——MAC地址、IP地址和子网掩码

MAC地址、IP地址和子网掩码 一、MAC地址&#xff1a;硬件身份证 1、MAC地址的概念 MAC地址&#xff0c;即媒体访问控制地址&#xff08;Media Access Control Address&#xff09;&#xff0c;是一个用于唯一标识网络设备的物理地址。每个网络接口卡&#xff08;NIC&#xf…

RocketMQ 主备自动切换模式部署

目录 主备自动切换模式部署 Controller 部署​ Controller 嵌入 NameServer 部署​ Controller 独立部署​ Broker 部署​ 兼容性​ 升级注意事项​ 主备自动切换模式部署 该文档主要介绍如何部署支持自动主从切换的 RocketMQ 集群&#xff0c;其架构如上图所示&#xff…

TeeChart NET for MAUI Crack

TeeChart NET for MAUI Crack 跨平台图表-移动或桌面应用程序的核心图表代码相同。 图表集合-60多种图表类型和50多种财务和统计指标。 图表类型 60多种2D和3D图表类型以及多种组合&#xff0c;包括&#xff1a; 标准&#xff1a;线条(条形)、条形、区域、饼图、快线、点(散点…

24届近5年上海大学自动化考研院校分析

今天给大家带来的是上海大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、上海大学 学校简介 上海大学是上海市属的综合性研究型大学&#xff0c;是教育部与上海市人民政府共建高校&#xff0c;是国家“211 工程”重点建设高校、上海市高水平地方大学建设高校&a…

Python爬虫遇到重定向问题解决办法汇总

在进行Python爬虫任务时&#xff0c;遇到重定向问题是常见的问题之一。重定向是指在发送请求时&#xff0c;服务器会返回一个新的URL&#xff0c;将请求重新定向到该URL。为了帮助您解决这个问题&#xff0c;本文将提供一些实用的解决办法&#xff0c;并给出相关的代码示例&…

论文阅读 - Social bot detection in the age of ChatGPT: Challenges and opportunities

论文链接&#xff1a;https://www.researchgate.net/publication/371661341_Social_bot_detection_in_the_age_of_ChatGPT_Challenges_and_opportunities 目录 摘要&#xff1a; 引言 1.1. Background on social bots and their role in society 1.2. The rise of AI-gene…