shell脚本知识汇聚之地

news2025/1/17 15:12:49

shell脚本

  • shell脚本
    • shell脚本编写
    • 变量的定义
    • 变量的使用
    • 变量值调换
    • 引号的使用
    • 环境变量
    • 输出全局变量
    • 只读变量
    • 位置变量
    • 预定义变量
    • 条件判断操作
    • if语句
    • case语句
    • for语句
    • while语句
    • until语句
    • 退出循环
    • sleep循环等待时间
    • shift 去除第一个位置变量参数
    • ${} $变量的特殊显示方式
    • echo用法

shell脚本

shell脚本编写

1)创建shell脚本文件

  • 文件名格式 一般以 .sh 后辍结尾

2)编写shell脚本

  • #!/bin/bash 声明解释器

  • 再做脚本注释 以#号开头都为注释

  • 编写脚本代码

3)执行shell脚本

  • 以绝对/相对路径执行脚本文件,执行脚本文件的用户需要有执行权限 chmod +x

  • sh / bash 指定脚本文件执行 (在子环境中执行脚本)

  • source / . 指定脚本文件执行(在当前的shell环境中执行脚本)

变量的定义

  • 1)变量名=变量值

  • 2)read -p “提示信息” 变量名

变量的使用

  • ${变量名} 可以控制变量名的范围

变量值调换

a=10

b=20

c=$a

a=$b

b=$c

引号的使用

  • ’ ’ 会把所有字符当做普通字符看待

  • " " 会把一些符号当做特殊字符使用,比如$,会引用变量的值

  • `` 获取双撇号里的命令执行结果,效果等同于 $( )

环境变量

  • PATH LANG PWD HOME HISTSIZE USER 常用的环境变量

  • env 命令查看当前shell环境有哪些环境变量

输出全局变量

  • vim /etc/profile

  • export 变量名=变量值

只读变量

  • readonly 变量名=变量值

位置变量

  • $0 脚本本身

  • $1 - $9 脚本后跟的以空格间隔的位置参数

  • ${10} 第十个的时候需要加上大括号不然会被当做$1和0的组合

预定义变量

  • $ ∗ 脚本后面跟的所有参数,使用双引号” * 脚本后面跟的所有参数,使用双引号” 脚本后面跟的所有参数,使用双引号*“会把所有参数看做为一个整体

  • $ @ 脚本后面跟的所有参数,使用双引号” @ 脚本后面跟的所有参数,使用双引号” @脚本后面跟的所有参数,使用双引号@“会把所有参数看做作为一个个以空格间隔的个体

  • $# 脚本后面跟的所有参数的数量

  • $?返回上一条命令执行的状态码,0为上一条命令执行正常,其他非零值为执行异常

条件判断操作

  • test [选项] [表达式]

  • [ 选项 表达式 ]

  • 选项

    • -e 目录或文件是否存在
    • -d 是否为目录,也可判断目录是否存在
    • -f 是否为文件,也可判断文件是否存在
    • -r 是否拥有读取权限
    • -w 是否拥有写入权限
    • -x 是否拥有执行权限
    • -L 是否为符号链接文件,也可判断链接文件是否存在
  • 整数值比较符号

    • -eq 等于 ==
    • -ne 不等于 !=
    • -gt 大于 />
    • -ge 大于等于
    • -lt 小于
    • -le 小于等于

使用符号比较时 需要 (( 100 != 90 ))使用 双括号

  • 字符串比较 (在比较字符串的时候用双引号 “$i” )
    • ==/= 等于
    • != 不等于
    • -z “字符串” 检查字符串是否为空,对于未定义或赋予空值的变量将视为空串,空则成功
    • -n “字符串” 检查字符串是否有内容,有字符则成功
  • 逻辑运算符
    • && (-a) 逻辑并且
      • [ 表达式A ] && [ 表达式B ]
      • [ [ 表达式A && 表达式B ] ]
      • [ 表达式A -a 表达式B ]
    • || (-o) 逻辑或
      • [ 表达式A ] || [ 表达式B ]
      • [ [ 表达式A || 表达式B ] ]
      • [ 表达式A -o 表达式B ]
    • 命令A && 命令B
      • 命令A执行成功才会执行命令B
    • 命令A || 命令B
      • 命令A 执行成功不执行命令B,命令A失败则执行命令B
  • 三元运算符
    • 表达式 ? 值A : 值B
      • 表达式成立取:前的值A,不成立则取:后值B
    • 表达式 && 命令A || 命令B
    • 表达式成立执行命令A ,不成立则执行命令B

if语句

  • if [ 表达式 ]

  • if test 表达式

  • if 命令A

    • then (if判断成功则执行then)
      • 代码块
    • elif [ 表达式 ] (if判断失败则执行elif或else)
      • then;代码块
      • elif [ 表达式 ] ;then; …… #可以跟多个elif
    • else (else为否则的意思 前面的判断条件都不成立时执行else)
      • 代码块
  • fi #固定结束格式

  • ;可以被看做换行符可以写成

    • if 命令;then;代码块;fi

case语句

  • case 变量值($变量名) in
  • 模式1)
    • 代码块1
    • ;;
  • 模式2)
    • 代码块2
    • ;;
  • 模式3)
    • 代码块3
    • ;;
  • *)
    • 以上都不满足执行 * 内的代码块,* 为可选项
  • esac
  • 模式表达式要么为字符串,要么为通配符
    • read -p “请输入你的分数” num
    • case $num in
    • 100)
      • echo “完美”
      • ;;
    • 9[0-9])
      • echo “优秀”
      • ;;
    • [678] [0-9])
      • echo “很棒”
      • ;;
    • [0-9] | [1-5] [0-9])
      • echo “还需要努力”
      • ;;
    • esac (固定格式结尾)

for语句

for循环就是一个遍历的过程

  • for 变量 in 取值列表

  • do

    • 代码块
  • done

  • for ((变量=初始值;变量的范围;变量的迭代方式))

    • for ((i=1;i<=10;i++))
    • for ((;;)) #死循环

while语句

  • while [ 表达式 ]

  • do

    • 代码块(条件判断成立时循环执行的代码块)
    • 变量的迭代方式,如果不添加会死循环一值执行
  • done

until语句

  • until [ 表达式 ]

  • do

    • 代码块(条件判断不成立时循环执行的代码块,条件成立时结束循环)
    • 变量的迭代方式,如果不添加会死循环一值执行
  • done

退出循环

  • break 默认用于退出单层循环

    • break 2 退出两次循环
  • continue 用于终止某次遍历的执行,不会影响之后的循环(遍历变量每次被赋值循环的过程称为遍历)

    • continue 2 不仅终止当前遍历的执行,还会终止 外面一层循环的遍历过程。
  • exit 退出脚本的执行状态

    • exit 结束的脚本, $? 的返回值为0
    • exit 1 结束脚本 ,$? 的返回值为1,1可以换做所有非0的数

sleep循环等待时间

  • sleep n 秒 当循环执行到此命令时等候n秒在继续执行循环

shift 去除第一个位置变量参数

  • shift 命令可以去除第一个位置变量参数

${} $变量的特殊显示方式

  • i=192.168.55.44
  • ${i:2:2} :从变量i的下标2开始(下标从左到右从0开始依次增加),取三个数
    • 就是 2.1
  • ${ i%%.*} :从右往左删除直到最后一个 点 为止,只取剩余内容
    • 就是192
  • ${ i%.*} :从右往左删除直到遇见第一个 点 停止,取剩余内容
    • 就是192.168.55
  • ${ i#*.} :从左往右删除直到遇见第一个 点 停止,取剩余内容
    • 就是168.55.44
  • ${ i##*.} :从左往右删除直到最后一个 点 为止,取剩余内容
    • 就是44

echo用法

-n :不换行输出

-e :解释转义字符

-E :不解释转义字符

\a :发出警告声

\b :转移后相当于退格键(backspace/删除键),但前提是“\b”后面存在字符;“\b”表示删除前一个字符,“\b\b”表示删除前两个字符。

\c : 不换行输出,在 “\c” 后面不存在字符的情况下,作用相当于 echo -n ,但是当 “\c”后面任然存在字符时,“\c” 后面的字符将不会被输出

\e :escape,相当于\033
在这里插入图片描述

\E :作用相当于\e

\f :换行,但下一行内容起始位置和上一行从 \f 处换行的位置对齐

\n :换行且光标移至首行

\r :换行字符,光标移至行首,输出 \r 后面的内容

\t :表示插入tab,即横向制表符

\v :换行,但下一行内容其实位置和上一行从 \v 处换行的位置对齐

\ :表示插入反斜杠本身

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

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

相关文章

el-cascader后台给一组id回显可选择的选项列表

根据后台给一组id回显可选择的选项列表 <template><div><el-cascader:key"keyValue"ref"cascader"v-model"pids":props"{ label: name, value: id }":options"options"clearablefilterablechange"handl…

Maven配置阿里云仓库https

2022年开始&#xff0c;阿里云对以前的maven仓库地址进行升级&#xff0c;由原来的http换成https 原来链接&#xff1a; http://maven.aliyun.com/repository/public 现在链接&#xff1a; https://maven.aliyun.com/repository/public maven settings.xml配置 maven settin…

QString的解析与常用功能

QString存储一个16位QChar字符串&#xff0c;其中每个QChar对应一个UTF-16代码单元。(编码值大于65535的Unicode字符使用代理对存储&#xff0c;即两个连续的qchar。) Unicode是一个国际标准&#xff0c;支持目前使用的大多数书写系统。它是US-ASCII (ANSI X3.4-1986)和Latin-1…

盐湖卤水中分离硼的工艺有哪些

锂因其优良的物理化学性质&#xff0c;被认为是“推动世界进步的能源金属”&#xff0c;随着新能源、冶金等行业的快速发展&#xff0c;人们对锂的需求量逐年攀升。然而地壳中锂的含量仅为0.0065%左右&#xff0c;约80%的锂资源蕴含于盐湖卤水中。 盐湖卤水成分复杂&#xff0c…

Redis入门到入土(day03)

Redis的持久化 Redis 是内存数据库&#xff0c;如果不将内存中的数据库状态保存到磁盘&#xff0c;那么一旦服务器进程退出&#xff0c;服务器中的数据库状态也会消失。所以 Redis 提供了持久化功能&#xff01; RDB&#xff08;Redis DataBase&#xff09; 什么是RDB 在指…

HugNLP发布,集成多种NLP任务,可训ChatGPT类模型

HugNLP发布&#xff0c;集成多种NLP任务&#xff0c;可训ChatGPT类模型 作者&#xff1a;王嘉宁 HugNLP——全面统一的NLP框架开源了&#xff01; 近日&#xff0c;华师大HugAILab团队研发了HugNLP框架&#xff0c;这是一个面向研究者和开发者的全面统一的NLP训练框架&#x…

java版企业电子招投标采购系统源代码之系统的首页设计

​​ 功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为…

来来来,一起了解下MTK(联发科)

​ https://www.mediatek.com/ ​ 进入MTK官网&#xff0c;可以看到其产品分为七大方向&#xff1a;智能手机、笔记本电脑与平板电脑、家庭娱乐、车用市场、连接与网络技术、定制芯片服务、物联网。这里主要介绍智能手机、连接与网络技术、物联网三大版块。 一、智能手机 智…

使用护眼灯台灯哪个牌子好用来保护眼睛?真正做到护眼台灯品牌

现在的家长很多人觉得家里已经有灯光了&#xff0c;没必要在买台灯。但事实上台灯有很多优点&#xff0c;尤其对于小孩子来说&#xff1a;1.提供更好的光线:台灯能够提供更加明亮的光线&#xff0c;有助于保护眼睛健康。2.提高工作效率:台灯光线舒适可提高工作效率或学习效率。…

STM32G0开发板下载代码问题

任务&#xff1a; 通过CueMX生成代码&#xff0c;然后烧写到STM32G0开发板上。 遇到的问题&#xff1a; 1. CubeMX生成的代码能用Keil编译&#xff0c;但是下载不到flash中 2. CubeMX再次生成代码后&#xff0c;SWD无法识别芯片。 逐个击破&#xff1a; 1. CubeMX生成的代码…

Axure教程:动态分组柱状图(中继器)

本文将教大家如何用AXURE中的中继器做组分组柱状图。 如图&#xff1a; 预览地址&#xff1a;https://vvpq8c.axshare.com 原型下载地址&#xff1a;https://download.csdn.net/download/weixin_43516258/87761575?spm1001.2014.3001.5503 一、功能介绍 1、在中继器或表格中填…

php导出excel多个sheet

我引用的拓展是&#xff1a; "phpoffice/phpspreadsheet": "^1.4", 我的$accept数据是这样的 "data": { "examStu": [ { "ctime": "2023-04-27 16:28:16", "className": "大猛1", "n…

JavaScript—数据类型转换

目录 1、起 源 理 念 2、特 点 框 架 书 写 位 置 注 释 浏览器调试js代码 3、变量 ① 全局变量 ② 局部变量 ③ 常量 4、数据类型 严格检查数据类型-use strict ① 数 组 ② 字符串 6、类型转换 ① 字符串转数字 ② 字符串转bool值 ③ 能力判断 7、编码方…

自动控制原理笔记-频率响应法-稳定裕度

目录 一、增益裕度h&#xff08;幅值裕度, gain margin&#xff09; 二、相角裕度g (phase margin) 三、根据Bode图确定稳定裕度 相角裕度 一、增益裕度h&#xff08;幅值裕度, gain margin&#xff09; 开环幅相特性曲线&#xff08;奈氏曲线&#xff09;G(jw)与负实轴…

教你一招在VMware的NAT模式下,两台电脑如何互相访问对方的虚拟机

目录 一. 准备工作二. 开始2.1 设置NAT模式2.2 进行NAT模式设置2.3 XShell访问对方虚拟机 一. 准备工作 需要两台电脑&#xff08;我准备了两台win10&#xff09; VMware虚拟机&#xff1a;【官网下载】两台win10电脑上都安装好centos 7系统&#xff08;我这里是centos 7版本…

3.Java线程

Java线程 3.1 创建和运行线程 方法一&#xff0c;直接使用Thread import lombok.extern.slf4j.Slf4j;/*** 使用匿名内部类创建线程* author xc* date 2023/4/30 16:19*/ Slf4j public class Test1 {public static void main(String[] args) {Thread thread new Thread(){Ov…

OpenCV-Python图像几何变换

概念&#xff1a;几何变换是指将一幅图像映射到另外一幅图像内的操作。OpenCV提供了多个与映射有关的函数&#xff0c;这些函数使用起来方便灵活&#xff0c;能够高效地完成图像的映射。 缩放 cv2.resize()函数用于缩放图像 det cv2.resize(src, dsize[,dst[,fx[,fy[,interp…

入门级BP神经网络实现回归预测的原理与python代码

文章目录 一、BP神经网络是什么&#xff1f;二、BP神经网络的原理&#xff1f;三、BP神经网络预测过程如下1.初始化参数&#xff1a;2.前向传播&#xff1a;3.反向传播&#xff1a;4.更新参数&#xff1a;5.重复上述过程&#xff0c;直到满足收敛条件或达到最大迭代轮次。 四、…

【Liunx】进程地址空间

文章目录 &#x1f4d6; 前言1. 环境变量收尾1.1 认识bash进程&#xff1a;1.2 环境变量具有全局属性&#xff1a;1.3 内建命令&#xff1a; 2. 进程地址空间2.1 Liunx — 地址空间验证&#xff1a;2.2 感知地址空间的存在&#xff1a;2.3 认识地址空间&#xff1a;2.3 - 1&…

C++右值引用(左值表达式、右值表达式)(移动语义、完美转发(右值引用+std::forward))(有问题悬而未决)

文章目录 什么是右值&#xff1f;是什么是右值引用&#xff1f;什么是移动语义&#xff1f;什么是完美转发&#xff1f;&#xff08;右值引用std::forward&#xff09; 什么是右值&#xff1f; 在 C 中&#xff0c;表达式可以分为左值表达式和右值表达式。左值表达式指的是可以…