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

shell脚本编程规范与变量

文章目录

  • Shell编程文档整理
    • 一、Shell介绍
      • 1.1 简介
      • 1.2 Shell解释器
    • 二、快速入门
      • 2.1 编写Shell脚本
        • 2.1.1 创建脚本示例
        • 2.1.2 赋予执行权限
      • 2.2 执行Shell脚本
    • 三、Shell程序:变量
      • 3.1 语法格式
      • 3.2 变量使用
      • 3.3 变量类型
    • 四、字符串
      • 4.1 单引号
      • 4.2 双引号
      • 4.3 获取字符串长度
      • 4.4 提取子字符串
      • 4.5 查找子字符串
    • 五、Shell程序:参数传递
      • 5.1 参数传递方式
      • 5.2 特殊字符
      • 5.3 `$*` 和 `$@` 的区别
    • 六、Shell程序:运算符
      • 6.1 算术运算符
        • 6.1.1 **通过`( ( ) )`,`$[ ]`进行算术运算**
      • 6.2 关系运算符
      • 6.3 逻辑运算符
      • 6.4 字符串运算符
      • 6.5 文件测试运算符


Shell编程文档整理

一、Shell介绍

1.1 简介

Shell 是一个用 C语言编写的程序,通过 Shell 用户可以访问操作系统内核服务。

Shell类似于 DOS 下的 command 和后来的 cmd.exe。

Shell既是一种命令语言,又是一种程序设计语言。

Shell script 是一种为 shell 编写的脚本程序。

Shell 编程一般指 shell 脚本编程,不是指开发 shell 自身。

1.2 Shell解释器

Shell 编程跟传统的编程语言一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

Linux 的 Shell 解释器种类众多,一个系统可以存在多个 shell,可以通过 cat /etc/shells 命令查看系统中安装的 shell。

bash 由于易用和免费,在日常工作中被广泛使用。同时,bash 也是大多数 Linux 系统默认的 Shell。
在这里插入图片描述


二、快速入门

2.1 编写Shell脚本

使用vi编辑器新建一个文件hello.sh(扩展名并不影响脚本执行)

#!/bin/bash
echo "Hello World !"
  • #! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell
  • echo 命令用于向窗口输出文本
2.1.1 创建脚本示例
mkdir shelldemo
cd shelldemo
vi hello.sh

在这里插入图片描述

内容:

#!/bin/bash
echo "Hello World!"

在这里插入图片描述

2.1.2 赋予执行权限
chmod +x ./hello.sh

在这里插入图片描述

2.2 执行Shell脚本

执行方式:

  1. ./hello.sh:在当前目录执行
  2. /xx/xxx.sh:书写全路径执行
  3. sh /xx/xxx.sh:作为解释器参数执行(无需执行权限)
  4. source xxx.dh:可以没有执行权限
    在这里插入图片描述

三、Shell程序:变量

3.1 语法格式

变量名=

命名规则:

  • 等号两边不能有空格
  • 首个字符必须为字母(a-z,A-Z)
  • 中间不能有空格,可以使用下划线(_)
  • 不能使用标点符号
  • 不能使用 bash 里的关键字

3.2 变量使用

your_name="bigdata.com"
echo $your_name
echo ${your_name}
  • 花括号可选,用于帮助解释器识别变量边界
  • 变量可重新定义
  • readonly 定义只读变量
  • unset 删除变量(不能删除只读变量)

在这里插入图片描述

3.3 变量类型

  • 局部变量:仅在当前 shell 实例中有效
    在这里插入图片描述

  • 全局变量(环境变量):所有程序都可访问
    在这里插入图片描述


四、字符串

字符串是shell编程中最常用最有用的数据类型,字符串可以单引号,也可以用双引号,也可以不用引号

4.1 单引号

实例:

skill='linux'
str='I am goot at $skill'  # 变量无效
echo $str #输出

输出结果: I am goot at $skill
在这里插入图片描述
单引号字符串限制:
· 单引号里任何数字字符都会原样输出,单引号字符串中的变量是无效的;

· 单引号字串中不能出现单独一个单引号,但可以成对出现,作为字符串拼接使用。

4.2 双引号

示例:

skill='linux'
str="I am goot at $skill"  # 变量有效

在这里插入图片描述
输出结果: i am goot at linux

4.3 获取字符串长度

skill='hadoop'
echo ${#skill}  # 输出6

在这里插入图片描述

4.4 提取子字符串

str="I am goot at hadoop"
echo ${str:2}    # 输出:am goot at hadoop
echo ${str:2:2}  # 输出:am

在这里插入图片描述

4.5 查找子字符串

str="I am goot at hadoop"
echo `expr index "$str" am`  # 输出3

在这里插入图片描述


五、Shell程序:参数传递

5.1 参数传递方式

./shell程序 参数1 参数2 ...

脚本内获取参数:

  • $0:脚本名称
  • $1$2…:第1、2个参数
    在这里插入图片描述
    执行结果
    在这里插入图片描述

5.2 特殊字符

符号含义
$#传递到脚本的参数个数
$*以一个单字符串显示所有向脚本传递的参数
$$显示脚本运行的当前进程ID号
$!最后一个后台进程ID
$@所有参数作为列表
$?上一条命令退出状态,显示0则表示没有错误

在这里插入图片描述
在这里插入图片描述
$?:判断上一条命令是否正确,若输出为“0”则表示执行成功,非“0”则执行失败
在这里插入图片描述

5.3 $*$@ 的区别

  • 不加引号时相同
  • 加引号时:
    • "$*":所有参数作为一个字符串
    • "$@":每个参数作为独立字符串

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


六、Shell程序:运算符

6.1 算术运算符

Shell和其他编程语言一样,支持包括:算术、关系、逻辑、字符串等运算
符。
原生 /bin/bash 不支持简单的数学运算,但是可以通过其他命令来实现,
例如: expr
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
使用 expr$(())$[]

val=`expr 2 + 2`  #此处需要用反引号,且”2 + 2“之间需要空格
val=$((1+1))
val=$[1+2]

在这里插入图片描述
附加内容:read命令

·read -p 提示用户显示
·read -n 第一字符数

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

6.1.1 通过( ( ) )$[ ]进行算术运算

案例1、通过(())进行算术运算
在这里插入图片描述

在这里插入图片描述
案例2 通过“$[ ]"进行运算
在这里插入图片描述

6.2 关系运算符

运算符含义
-eq等于
-ne不等于
-lt小于
-gt大于
-le小于等于
-ge大于等于

6.3 逻辑运算符

  • -a:双方都成立(and)表达式1 -a表达式2
  • -o:单方成立(or)表达式1 -0 表达式2
  • &&||:用于 echo 或条件判断
    在这里插入图片描述

6.4 字符串运算符

运算符含义
-n非空字符串
-z空字符串
=判断两个字符串是否一样
!=判断两个字符串是否不相等

6.5 文件测试运算符

运算符含义
-f存在且是普通文件
-d存在且是目录
-s非空文件
-e文件存在
-r可读
-w可写
-x可执行

http://www.dtcms.com/a/356116.html

相关文章:

  • Shell 入门
  • LeetCode刷题记录----35.搜索插入位置(Easy)
  • 117、【OS】【Nuttx】【周边】效果呈现方案解析:while 循环处理(下)
  • 虚拟机逃逸攻防演练技术文章大纲
  • 八个按键一一对应八个输出
  • C语言————斐波那契数列(例题1)
  • BoardSim仿真
  • DoIP路由激活报文
  • Shell脚本(2)
  • 洛谷p1028数的计算 详解
  • 【智能体】零代码学习 Coze 智能体(1)
  • 人工智能基础概念
  • java通过redis简单实现分布式锁
  • 【MySQL数据库】存储引擎 学习记录
  • 深度学习进阶
  • B站 XMCVE Pwn入门课程学习笔记(8)
  • Mybatis中缓存机制的理解以及优缺点
  • 详解 外部负载均衡器 → Ingress Controller Pod 这个过程
  • LCEDA电气规则
  • HTTPS的底层是怎么做的,使得数据更安全
  • 【python】python进阶——with关键字
  • 一个格式化方法一个打印语句完成一个基本日历展示,完成完美『终端呈现』(迭代升级)(彩色·Python)
  • 刀客doc:Instagram会成为Meta广告业务的第二曲线吗?
  • 机器视觉学习-day05-ROI切割
  • 博创软件慧云台庙务管理系统产品优势分析
  • Java -- 文件基础知识--Java IO流原理--FileReader
  • Makefile的使用
  • 进程组 会话 作业控制 守护进程
  • LeetCode 100 -- Day7
  • JDK8升级到JDK17的注意事项