当前位置: 首页 > news >正文

【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做什么都可以,但显然它最适合的是自动化,因为只需要将你原来手动敲的命令都复制到一个文件里面就行了。好了,我们下期见!

相关文章:

【Shell】基础语法(二)

文章目录 一、Shell基本语法文件名代换命令代换算术代换转义字符引号 二、Shell脚本语法条件测试分支结构循环 三、总结 一、Shell基本语法 文件名代换 用于匹配的字符称为通配符&#xff08;Wildcard&#xff09;&#xff0c;如&#xff1a;* ? [ ] 具体如下&#xff1a; *…...

Unity之webgl端通过vue3接入腾讯云联络中心SDK

腾讯云联络中心SDK:云联络中心 Web-SDK 开发指南-文档中心-腾讯云 (tencent.com) 1 首先下载Demo ​ 1.1 对其进行解压 ​ 1.2根据文档操作 查看README.md,根据说明设置server下的dev.js里的相关参数。 然后打开电脑终端&#xff0c;cd到项目的路径&#xff1a; ​ 安装…...

《算法竞赛·快冲300题》每日一题:“连接草坪(II)”

《算法竞赛快冲300题》将于2024年出版&#xff0c;是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码&#xff0c;以中低档题为主&#xff0c;适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 连…...

LNMP及论坛搭建(第一个访问,单节点)

LNMP&#xff1a;目前成熟的一个企业网站的应用模式之一&#xff0c;指的是一套协同工作的系统和相关软件 能够提供静态页面服务&#xff0c;也可以提供动态web服务&#xff0c;LNMP是缩写 L&#xff1a;指的是Linux操作系统。 N&#xff1a;指的是nginx&#xff0c;nginx提…...

EXCEL,多条件查询数字/文本内容的4种方法

目录 1 问题&#xff1a;如何根据多条件查询到想要的内容 2 方法总结 2.1 方法1&#xff1a; sumif() 和sumifs() 适合查找符合条件的多个数值之和 2.2 方法2&#xff1a;使用lookup(1,0/((区域1条件1)*(区域2条件2)*....),结果查询区域) 2.3 方法3&#xff1a;使用 ind…...

全志D1-H (MQ-Pro)驱动 OV5640 摄像头

内核配置 运行 m kernel_menuconfig 勾选下列驱动 Device Drivers ---><*> Multimedia support --->[*] V4L platform devices ---><*> Video Multiplexer[*] SUNXI platform devices ---><*> sunxi video input (camera csi/mipi…...

2023下半年软考初级网络管理员报名入口-报名流程-备考方法

软考初级网络管理员2023下半年考试时间&#xff1a; 2023年下半年软考初级网络管理员的考试时间为11月4日、5日。考试时间在全国各地一致&#xff0c;建议考生提前备考。共分两科&#xff0c;第一科基础知识考试具体时间为9:00到11:30&#xff1b;第二科应用技术考试具体时间为…...

QEMU源码全解析29 —— QOM介绍(18)

接前一篇文章&#xff1a;QEMU源码全解析28 —— QOM介绍&#xff08;17&#xff09; 本文内容参考&#xff1a; 《趣谈Linux操作系统》 —— 刘超&#xff0c;极客时间 《QEMU/KVM》源码解析与应用 —— 李强&#xff0c;机械工业出版社 特此致谢&#xff01; 前文讲解了类…...

从入门到精通——【初识网络】

文章目录 前言1.网络发展背景2.计算机网络分类3.通信协议4.协议分层5. TCP/IP协议6.网络协议支持7. 封装&分用8. 客户端&服务端 前言 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统…...

MySQL alter命令修改表详解

目录 ALTER TABLE 语法 ALTER TABLE 实例 添加一列 添加多列 重命名列 修改列定义 修改列名和定义 添加主键 删除列 重命名表 修改表的存储引擎 结论 在使用表的过程中&#xff0c;如果您需要对表进行修改&#xff0c;您可以使用 ALTER TABLE 语句。通过 ALTER TAB…...

Vulnhub: ColddWorld: Immersion靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.183 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.183 查看login的源码发现提示&#xff1a;page和文件/var/carls.txt 漏洞利用 wfuzz探测account.php页面发现文件包含&am…...

Redis 总结【6.0版本的】

还差什么&#xff1f;【按照这个为基础&#xff0c;对照他的Redis路线图&#xff0c;冲冲冲】 Redis的常见操作和命令&#xff1a;Redis基本操作命令&#xff08;图文详解&#xff09;_redis 命令_进击小高的博客-CSDN博客 Redis的持久化&#xff0c;一致性&#xff1a;AOF&…...

状态模式(C++)

定义 允许一个对象在其内部状态改变时改变它的行为。从而使对象看起来似乎修改了其行为。 应用场景 在软件构建过程中&#xff0c;某些对象的状态如果改变&#xff0c;其行为也会随之&#xff0c;而发生变化&#xff0c;比如文档处于只读状态&#xff0c;其支持的行为和读写…...

承泰科技Q3再获30多个智驾项目,新增订单0.86亿!累计近11亿!

中国毫米波雷达市场正处于高速发展期&#xff0c;以承泰科技为代表的本土供应商在前装量产赛道上展示出加速度。 高工智能汽车研究院预测&#xff0c;随着L2及L2持续处于市场增长的高速期&#xff0c;对应毫米波雷达上车量将在2023年实现30-50%的同比增速。 根据高工智能汽车…...

以太网Ethernet通信协议

一、以太网简介 计算机网络可分为局域网(LAN)、 城域网(MAN)、广域网(WAN)、互联网(Initernet)。局域网按传输介质所使用的访问控制方法可分为&#xff1a;以太网(Ethernet)、光纤分布式数据接口(FDDI)、异步传输模式(ATM)、令牌环网(Token Ring)、交换网(Switching) 等&#x…...

内网横向移动—资源约束委派

内网横向移动—资源约束委派 1. 资源约束委派1.1. 基于资源的约束委派的优势1.2. 约束性委派和基于资源的约束性委派配置的差别1.3. 利用条件1.3.1. 什么用户能够修改msDS-AllowedToActOnBehalfOfOtherIdentity属性1.3.2. 将机器加入域的域用户 2. 案例操作2.1. 获取目标信息2.…...

Spring Boot Logback日志格式改为JSON

在阿里云、或者日志分析时使用JSON格式输出日志更加方便。 依赖 增加Logbak JSON解析依赖。 另外需要注意的是JSON格式输出依赖Jackson&#xff0c;根据工程情况按需添加Jackson依赖。 <!--日志--><dependency><groupId>ch.qos.logback.contrib</grou…...

Linux 块设备操作函数

和字符设备的fil_operations一样&#xff0c;块设备也有操作集&#xff0c;为结构体block_device_operations&#xff0c;此结构体定义在include/linux/blkdev.h中&#xff0c;结构体内容如下&#xff1a; struct block_device_operations {int (*open) (struct block_device …...

linux c++网络编程基础:服务端与客户端的实现

在Linux环境下,我们可以使用socket编程来实现网络通信。下面是一个简单的C++版本的客户端和服务端的示例代码。 服务端代码: #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <string.h> #...

坐标转换-使用geotools读取和转换地理空间表的坐标系(sqlserver、postgresql)

前言&#xff1a; 业务上通过GIS软件将空间数据导入到数据库时&#xff0c;因为不同的数据来源和软件设置&#xff0c;可能导入到数据库的空间表坐标系是各种各样的。 如果要把数据库空间表发布到geoserver并且统一坐标系&#xff0c;只是在geoserver单纯的设置坐标系只是改了…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...