shell脚本

一、shell脚本基本介绍

格式要求

  1. 脚本要以 #!/bin/bash 开头,debain需要改成#!/bin/dash
  2. 脚本需要有可执行权限

shell常用执行方式

  • 输入脚本的绝对路径或相对路径(该方式首先要赋予脚本执行权限)
  • sh+脚本 不用执行赋予脚本执行权限也可以执行
  • !/bin/bash 开头的需要 bash+脚本

二、shell的变量

变量介绍

  1. Linux Shell中变量分为:系统变量和用户自定义变量
    shell脚本
  2. 显示当前shell中所有变量:set

变量定义

  1. 定义变量:变量名=值
  2. 撤销变量:unset 变量
  3. 声明静态变量:readonly 变量 ,静态变量不能unset
  4. 变量命名规则:
  5. 变量可以由字母、数字和下划线组成,但不能以数字开头
  6. 等号两侧不能有空格
  7. 变量名称一般习惯为大写(shell编写的一个规范)
  8. shell注释规则

#!/bin/bash 单行注释 内容 多行注释 :<</p> <pre><code> ## 设置环境变量 1. export 变量名=变量值 将shell变量输出为环境变量/全局变量 2. source 配置文件 将修改后的配置信息立即生效 ## 位置参数变量 ### 介绍 当我们执行一个shell脚本时希望获取命令行参数信息时,可以用到位置参数变量 如:./123.sh 111 222,这就是一个执行shell的命令,123.sh就可以使用位置参数变量获取到参数信息 ### 基本语法 * $n (功能描述:n为数字,$0代表命令本身,$1-\(9代表第1-9个参数,10以后的参数需要用大括号包裹起来例如:\){100}) * $* (功能描述:该变量代表命令行中所有参数) * $@ (功能描述:该变量也代表命令行所有参数,\(@与\)*不同的是前者吧每个参数区别对待,后者是看成一个整体) * $# (功能描述:变量代表命令行中所有参数的个数) ### 预定义变量 介绍:shell设计之初就已经定义好的变量,可以直接使用 基本语法 * $$当前进程的进程号 * $!后台运行的最后一个进程的进程号 * $?最后一次执行的命令的返回状态,如果为零者上一个命令正确执行,非零则上一次命令执行不正确 shell要在后台方式运行一个脚本:脚本名称 & </code></pre> <h1>!/bin/bash</h1> <h1>以后台方式运行123.sh</h1> <p>/home/kali/123.sh &</p> <pre><code> 三、运算符 1. \(((运算式))或\)[运算式]或者expr m + n 2. expr运算符之间要有空格,如果希望将expr的结果赋给某个变量需要使用 3. expr 的乘,除,取余:* /% </code></pre> <h1>!/bin/bash</h1> <h1>案例1:计算(2+3)*4</h1> <h1>第一种</h1> <p>R1=$(((2+3)*4))</p> <h1>第二种</h1> <p>R2=$[(2+3)*4]</p> <h1>第三种</h1> <p>T=<code>expr 2 + 3</code> R3=<code>expr $T \* 4</code></p> <pre><code> 四、条件判断 ## 基本语法: [ condition ] 注:条件前后需要有空格 非空返回ture ## 判断语句 1. = 字符串比较 2. 两个整数的比较 - -lt 小于 - -le 小于等于 - -eq 等于 - -gt 大于 - -ge 大于等于 - -ne 不等于 3. 按照文件权限进行判断 - -r 有读的权限 - -w 有写的权限 - -x 有执行的权限 4. 按照文件类型进行判断 - -f 文件存在并且是一个常规文件 - -e 文件存在 - -d 文件存在并是一个目录 五、流程判断 ## 1.if判断 基本语法 </code></pre> <h1>!/bin/dash</h1> <p>if[ 条件判断式 ] then 代码 elif[ 条件判断式 ] then 代码 fi</p> <pre><code> 注意事项:[ 条件判断 ] 中括号和条件判断式之间必须有括号 应用案例 </code></pre> <h1>!/bin/dash</h1> <p>if [ $1 -ge 60 ] then echo "及格了" elif [ $1 -lt 60 ] then echo "不及格" fi 执行命令 bash xxx.sh</p> <pre><code> ## 2.case语句 基本语法 </code></pre> <p>case $变量 in "值1") 程序1 #如果变量的值等于值1,则执行程序1 ;; "值2") 程序2 #如果变量的值等于值2,则执行程序2 ;;</p> <h1>省略其他分支</h1> <p>*) 如果变量的值都不是以上的值,则执行此程序 ;; esac</p> <pre><code> 案例: </code></pre> <h1>!/bin/dash</h1> <p>case $1 in "1") echo "周一" ;; "2") echo "周二" ;; "3") echo "周三" ;; "4") echo "周四" ;; "5") echo "周五" ;; *) echo "该放假了" ;; esac</p> <pre><code> ## 3.for循环 基本语法 </code></pre> <h1>!/bin/dash、</h1> <p>for (( 初始值; 循环控制条件; 变量变化)) do 程序 done</p> <pre><code> 案例:遍历数组 </code></pre> <h1>!/bin/dash</h1> <p>a=(10 20 30 40) for (( i=0; i<4; i++)) do echo ${a[i]} done < code><!--4;--></p> <pre><code> shell中数组用括号包围,数和数之间用空格间隔 ## 4.while循环 基本语法 </code></pre> <h1>!/bin/dash</h1> <p>while [ 条件判断式 ] do 程序 done</p> <h1>注:while与[]符号之间需要有空格分割</h1> <pre><code> 案例:从命令行输入一个num,计算从1加到num是多少 </code></pre> <h1>!/bin/dash</h1> <p>SUN=0 i=0 while [ $i -le $1 ] do SUM=$[$SUM+$i] i=$[$i+1] done echo $SUM</p> <pre><code> 六、read读取控制台输入 基本语法:read 【选项】 【参数】 选项: * -p指定读取值时的提示符 * -t指定读取值时等待的时间(秒) 参数:指定读取值的变量名 案例:读取控制台输入值并输出输入值的平方 </code></pre> <h1>!/bin/dash</h1> <p>read -p "请输入一个数num=" NUM NUM1=$[$NUM*$NUM] echo "num的平方=$NUM1"</p> <pre><code> 七、函数 ## 1.系统函数 ### basename 函数 语法:basename 【文件路径】 【后缀】 功能:返回完整路径最后/的部分,常用于获取文件名字 后缀:若后缀被指定,将会去除相应后缀 案例: ![shell脚本](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230605/2643789-20221002163823263-1617142898.png) ### dirname函数 语法:dirname 【文件绝对路径】 功能:返回完整路径最后/的前面的部分,常用于返回路径部分 案例: ![shell脚本](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230605/2643789-20221002163838787-1931997577.png) ## 2.自定义函数 基本语法 </code></pre> <p>function 函数名 (){ 程序代码 }</p> <pre><code> 调用时直接写函数名称 案例:计算输入的两个参数的和 </code></pre> <h1>!/bin/dash</h1> <p>function getSum(){ SUM=$[$n1+$n2] echo "和是=$SUM" } read -p "n1=" n1 read -p "n2=" n2 getSum $n1 $n2

如果对你帮助,请点点推荐

Original: https://www.cnblogs.com/Nuy0ah/p/16748998.html
Author: Nuy0ah
Title: shell脚本

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/573824/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Redis 缓存更新一致性

    在使用 Redis 作为数据库缓存的场景中对数据的读取流程通常是先读取缓存如果命中则返回,未命中则从数据库读取并把数据写到缓存中。 当更新数据时则数据库和缓存都要进行更新,此时我们…

    Linux 2023年5月28日
    091
  • 回溯法:算法思路以及相关流程图的绘制

    参考建模原文2020国赛B题参考文章1 回溯法介绍 深度优先搜索(缩写DFS):对一个连通图进行遍历的算法。它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标…

    Linux 2023年6月14日
    088
  • zabbix用户,角色,权限,模板管理

    zabbix用户,角色,权限,模板管理 用户组 用户角色 用户 使用刚才创建的用户登录 模板组 模板 模板的监控项可以自己创建也可以从其他模板复制 posted @2022-09-…

    Linux 2023年6月13日
    0118
  • MIT6.828——Lab2内存管理准备知识

    保护模式内存管理机制 MIT6.828——Lab1 PartA MIT6.828——Lab1 PartB 分段机制的问题 ​ 分段的主要问题,出现在内存不足或者内存碎片过多的情况下…

    Linux 2023年5月27日
    0121
  • 聊聊Netty那些事儿之从内核角度看IO模型

    从今天开始我们来聊聊Netty的那些事儿,我们都知道Netty是一个高性能异步事件驱动的网络框架。 它的设计异常优雅简洁,扩展性高,稳定性强。拥有非常详细完整的用户文档。 同时内置…

    Linux 2023年6月6日
    086
  • Sharding-jdbc 5.1.2案例

    简介 sharding-jdbc案例,版本5.1.2 springboot + mybatis-plus + sharding-jdbc 项目地址:sharding-jdbc-ex…

    Linux 2023年6月7日
    0115
  • 安装Redis

    1、下载redis 2、解压缩、安装 安装完之后,可以执行以下make test,执行make test之前需要先安装tcl 3、配置 redis服务后台启动 找到: 修改为: 4…

    Linux 2023年5月28日
    093
  • 数据库备份数据脚本

    #!/bin/bash currentpath=dirname $0 if [ ${currentpath} == ‘.’ ];then currentpath=pwd fi ba…

    Linux 2023年6月8日
    080
  • 《Redis开发与运维》——(六)Redis复制(脑图)

    posted @2021-01-09 15:05 雪山上的蒲公英 阅读(91 ) 评论() 编辑 / 返回顶部代码 / Original: https://www.cnblogs….

    Linux 2023年5月28日
    076
  • MySQL回表查询

    一.MySQL索引类型 1.普通索引:最基本的索引,没有任何限制 2.唯一索引(unique index):索引列的值必须唯一,但是允许为空 3.主键索引:特殊的唯一索引,但是不允…

    Linux 2023年6月6日
    0110
  • 使用并发 ssh 连接来提升捞日志脚本执行效率

    问题背景 公司有简单粗略的日志服务,部署在多台机器实例上,采集的日志记录在每台机器的本地硬盘上,写一小时后日志文件自动切换,硬盘空间自动回滚。大约可以保存两三天的历史数据。为什么会…

    Linux 2023年5月27日
    073
  • Linux与Windows文件同步

    本次采用的同步方式是rsync,Rsync是一款免费且强大的同步软件,可以镜像保存整个目录树和文件系统,同时保持原来文件的权限、时间、软硬链接。第一次同步时会复制全部内容,下次只传…

    Linux 2023年6月8日
    0135
  • JVM学习 类加载子系统

    JVM 哔哩哔哩 尚硅谷视频 宋红康老师 Java代码执行流程 简图 详细图 1、类加载子系统 类加载器子系统的作用 类加载器子系统负责从文件系统或者网络中加载Class文件,cl…

    Linux 2023年6月7日
    0104
  • 【spring-boot】配置Redis工具类

    如何在spring-boot中使用Redis工具类 修改pom.xml文件 新增spring-boot-starter-data-redis配置 org.springframewo…

    Linux 2023年5月28日
    0105
  • NTP和chrony时间同步

    古代计时方式 ●在远古时期,人类用来确定时间的方式是一些自然界”相对”亘古不变的周期。如地球的公转是为一年,月球的公转是为一月,地球的自转是为一天等,最早的…

    Linux 2023年6月7日
    0112
  • kubenetes无法创建pod/创建RC时无法自动创建pod的问题

    一、问题概述 问题1:虽然每次通过yaml创建rc都显示成功了,但是kubectl get pod却没显示任何的pod. 问题2:直接通过yaml创建pod提示apixxx 问题3…

    Linux 2023年6月14日
    0108
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球