shell 脚本变量

news2024/11/23 13:09:10

目录

什么是 shell

shell 的两种面向对象

shell 脚本概述

脚本 (本质为程序)

脚本的组成

执行脚本

例题

脚本构成

脚本执行逻辑及执行方式

脚本的常见错误

编写 shell 脚本

执行脚本文件的方式

重定向

重定向操作

shell 变量的作用及类型

变量的作用

变量的类型

变量的使用方式

自定义变量

命名要求

特殊符号

环境变量

示例

只读变量

位置变量

预定义(状态)变量

整数的运算环境

expr ,命令

脚本举例

简单的计算器脚本

显示五大性能脚本

磁盘分区的脚本

本地搭建 yum 仓库脚本

脚本补充命令

set -e

set -u

| (管道符)

|xargs

echo $?

read


什么是 shell

—— 是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户;这种对话方式可以是交互的也可以是非交互的,我们所输入的命令计算机是不识别的,这时就需要一种程序来帮助我们进行翻译,变成计算机能识别的二进制程序,同时又把计算机生成的结果返回给我们


shell 的两种面向对象

—— 面向过程语言

  • 开发的时候,需要一步一步执行

  • 做一件事情,排出个步骤

  • 问题规模小,可以步骤化,按部就班处理

  • 以指令为中心,数据服务于指令

  • C 、shell

—— 面向对象语言

  • 开发的时候将任务当成一个整体

  • 一种认识世界、分析世界的方法论,将万事万物抽象为各种对象

  • 将编程看成是一个事物,对外界来说,事物是直接使用的,不用关心事情内部的情况,而编程就是设置事物能够完成功能

  • 类是抽象的概念,是万事万物的抽象,是一类事物的共同特征的集合

  • 对象是类的具象,是一个实体

  • 问题规模大,复杂系统

  • 以数据为中心,指令服务于数据

  • java 、python 、golang 等 云 go k8个字母s 平台


shell 脚本概述

—— shell 脚本的概念

  • 将要执行的命令按顺序保存到一个文本文件

  • 给该文件可执行权限

  • 可结合各种 shell 控制语句以完成更复杂的操作

—— shell 脚本应用场景

  • 重复性操作

  • 交互性任务

  • 批量事务处理

  • 服务运行状态监控

  • 定时任务执行


脚本 (本质为程序)

—— 如果以 .sh 为结尾,会显示高亮,否则视为普通文件

脚本的组成
  • 声明解释器

  • 注释信息

  • 执行命令

#!/bin/bash  #声明解释器,代表接下来使用什么解释器来解释接下来的命令
#命令内容

执行脚本
  1. 直接调用 shell 解释器,加上脚本的名字

    —— 格式:bash 脚本名 ;不需要加上权限

  2. 路径/脚本

    —— 路径:绝对路径;需要权限

  3. source (或 .)脚本名

    —— 不建议使用,不需要权限,会修改目前的环境内容,会有一些问题

    —— source 文件名 参数:会直接修改 bash 环境

如果想让脚本全局运行(Tab 键补全),将脚本放入 $PATH 路径下,并且脚本要有执行权限

例题

为什么命令可以补全

—— 运行权限

脚本构成
  • 脚本申明(解释器):第一行开头 “#!/bin/bash” ,表示此行以下的代码语句是通过 /bin/bash 程序来解释执行,#!/bin/bash 为默认的解释器还有其它类型解释器 #!/bin/python #!/bin/pxpect

  • 注释信息:以 # 开头的语句表示为注释信息

  • 可执行语句:比如 echo 命令用于输出 " " 之间的字符串

脚本执行逻辑及执行方式

脚本执行逻辑

  1. 顺序执行:程序按从上到下顺序执行

  2. 选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行

  3. 循环执行:程序执行过程中需要重复执行多次某段语句

脚本的常见错误
  • 命令错误:不影响接下来的命令执行,但是本条命令不执行

    —— bash -x 脚本名 :模拟执行后发现错误

  • 语法错误:直接影响脚本无法正常运行

    —— bash -n 脚本名:检查语法错误

  • 逻辑错误

常见错误的区别

  1. 语法错误:会导致后续的命令不继续执行,可以用 bash -n 检查错误,提示的出错行数不一定是准确的

  2. 命令错误:默认后续的命令还会继续执行,用 bash -n 无法检查出来,可以使用 bash -x 进行观察

  3. 逻辑错误:只能使用 bash -x 进行


编写 shell 脚本

执行脚本文件的方式
  1. 脚本文件路径(绝对路径与相对路径;必须要有 x 权限)

  2. 格式:sh 脚本文件路径

  3. 格式:source 脚本文件路径(也可以通过 . 来执行)

重定向

—— 改变电脑数据的输出方向(默认电脑数据的输出方向是屏幕)

解释

—— 发了一条指令给电脑操作,电脑会回复结果一定会显示在屏幕上,称为:标准输出

如果电脑没有正确回复,称为:错误输出

通过键鼠、扫描仪、话筒等设备输入给电脑的指令,称为:标准输入

—— 改变输出方向

  • 输出到别的终端设备

  • 输出到文件中

类型解释
标准输出(STDOUT)默认的设备为显示器,文件编号为 1 ,命令将执行后的输出结果发送到标准输出文件
标准错误(STDERR)默认的设备为显示器,文件编号为 2 ,命令将执行期间的各种错误信息发送到标准错误文件
标准输入(STDIN)默认的设备为键鼠,文件编号为 0 ,命令将从标准输入文件中读取在执行过程中需要的输入数据

重定向操作
类型操作符作用
重定向输入< 或 >从指定的文件读取数据,而不是从键鼠输入
重定向输入>将输出结果保存到指定的文件(覆盖原有内容)
>>将输出结果追加到指定的文件尾部
标准错误输出2>将错误信息保存到指定的文件(覆盖原有内容)
2>>将错误信息追加到指定的文件中
混合输出&>将标准输出、标准错误的内容保存到同一个文件中

shell 变量的作用及类型

变量的作用
  • 用来存放系统和用户需要使用的特定参数(值)

    —— 变量名:使用固定的名称,由系统预设或用户定义

    —— 变量值:能够根据用户设置、系统环境的变化而变化

变量的类型
  • 自定义变量:由用户自己定义、修改和使用

  • 预定义变量:$? 、$$ 、$* 、$@ ,shell 程序中自带的

  • 环境变量 :env 看到所有环境的变量

  • 只读变量 :只可以读不可以改

  • 位置变量 :$1 、$2、……、$n

含义

变量:值可以变化的

常量:值不可以变化

shell 不分数据类型,所有的数类型都是字符串

变量的使用方式
要求方式
设置变量变量名=变量值,两边没有空格
调用变量echo $变量名
删除变量unset 变量名
重新定义变量变量名=变量值
追加变量值变量名+=变量值

自定义变量

—— 默认情况下,新定义的变量只在当前的 shell 环境中有效,因此称为局部变量;当进入子程序或新的子 shell 环境时局部变量将无法再使用

—— 可以通过内部命令 export 将指定的变量导出为全局变量,使用户定义的变量在所有的子 shell环境中能够继续使用

格式:export 变量名

系统内置变量:PATH、UID、HOSTNAME、USER

命名要求
  • 区分大小写

  • 不能使程序中的保留字和内置变量:如: if, for, hostname

  • 只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线 “-",和主机名相反

  • 不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH

  • 驼峰 :StudentFirstName

  • 小驼峰 :studentFirstName

  • 下划线 :student_name

特殊符号
  • ${} 定义的变量名的范围;用 ${ } 一定不会错

  • " " (英文)变量在双引号中可以识别,弱识别

  • ' ' (英文)变量在单引号中不被识别,强识别

  • ``(英文)反撇号代表引用命令执行的结果,用于命令的替换,效果等于 $( )

环境变量
  • 由系统提前创建,用来设置用户的工作环境

  • 可以使用 env 命令查看环境变量

  • 需要记住的常用环境变量

  • 配置文件:/etc/profile(全局生效);~/.bash_profile(当前用户环境)

选项解释
$USER表示用户名称
$HOME表示用户的宿主目录
$LANG表示语言和字符集
$PWD表示当前所在工作目录
$PATH表示可执行用户程序的默认路径
示例

将文件所在目录添加路径,可以执行脚本

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/data
​
chmod +x 脚本名
​
直接输脚本名,可以执行

只读变量

—— 格式:readonly 选项 参数

  • readonly 命令用于定义只读 shell 变量和 shell 函数

  • readonly -p :可以输出显示系统中所有定义的只读变量

  • 变量值不允许修改(重新赋值)的情况

  • 无法使用 unset 删除

  • 最快方法重启

位置变量

—— 使用 $1 、$2、……等表示

位置参数含义
echo "$1"位置 1
echo "${10}"位置 10;10 以上的参数需要 {}
echo "$*"将所有项当成一个值
echo "$@"所有项
echo "$0"脚本本身
echo "$#"后面参数的个数

预定义(状态)变量
预定义作用
$?代表上一次命令的执行结果是否正确;0 代表正确,反之为错误
$0代表脚本的文件名字
$$当前 bash 的 pid
$#代表位置参数的总个数
$*代表返回所有参数,所有参数当成一个整体返回
$@代表返回所有参数,每一个参数都是一个独立的个体返回
$!后台任务最后一个 id

整数的运算环境

expr ,命令

—— 计算器

—— 格式:expr 变量1 运算符 变量2 [运算符 变量3]

运算符作用
+加法
-减发
\ *乘法
/除法
%取余数
++和--增加和减少,可前置也可以放在结尾
let定义变量并将器初始化为一个值:例;expr let a=1+1—将结果存储在变量 a 中,echo $a —输出结果

脚本举例

简单的计算器脚本

#!/bin/bash
read -p  "数字1:"  num1      #交互过程
read -p  "数字2:"  num2      #交互过程
​
expr  $num1 + $num2          #计算,数字1加数字2

显示五大性能脚本

#!/bin/bash
                               #删除空格   #只显示第三列空格也算一列
ip=`ifconfig ens32|grep netmask|tr -s " "|cut -d " " -f3` 
cpu=`lscpu |grep 型号名称|cut -d":" -f2|tr -s " "`  
mem=`free -h|grep Mem|tr -s " "|cut -d " " -f2`      
disk=`lsblk |grep disk|tr -s " "|cut -d" " -f4`
​
​
echo "-------------------systeminfo---------------------"
echo "ip地址  :    ${ip}"
echo "主机名  :    $(hostname)"
echo "系统版本:    $(cat /etc/redhat-release)"
echo "cpu型号 :   $cpu"
echo "内存大小:    $mem"
echo "磁盘大小:    $disk"
echo "--------------------------------------------------"
​

磁盘分区的脚本

#!/bin/bash
​
read -p "分区的设备:"   disk     #交互过程
read -p "分区的大小:"   num      #交互过程
​
echo -e "n\n\n\n\n${num}\nw\n "|fdisk ${disk}
​

实验过程

本地搭建 yum 仓库脚本

#!/bin/bash
mount /dev/sr0 /mnt
cd /etc/yum.repos.d
mkdir yuan
mv *.repo yuan
​
echo "
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
​
"  > local.repo
​
yum clean all &>/dev/null     #/dev/null 此为 Linux 的垃圾箱
yum makecache &>/dev/null    
​
yum install -y tree  &>/dev/null
#将下载产生的信息导入垃圾箱,就不会显示下载信息
​

脚本补充命令

set -e

—— 在脚本的前面输入该命令,一旦出错立即停止运行

set -u

—— 变量不存在不让执行

| (管道符)

—— 将第一个命令的结果当做后一个命令的处理对象

|xargs

—— 将上一个命令的结果翻译成标准输出结果作为下一个命令的处理对象

echo $?

—— 结果显示为 0 则正确,反之,错误

read

—— 用来提示用户输入信息,实现简单的交互过程

—— read -p :设置提示信息

read -t :输入等待时间(单位默认为秒)

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

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

相关文章

智能井盖传感器功能有哪些?

智能井盖传感器是一种集成了多种先进技术的传感器设备&#xff0c;旨在强化城市的公共安全&#xff0c;确保城市基础设施的稳定运作。这种传感器具有多种功能&#xff0c;例如实时监测井盖状态、监测井下气体等是否超出阈值。借助智能井盖传感器&#xff0c;政府和城市管理部门…

C++:拷贝构造函数,深拷贝,浅拷贝

一.什么是拷贝构造函数&#xff1f; 同一个类的对象在内存中有完全相同的结构&#xff0c;如果作为一个整体进行复制&#xff08;拷贝&#xff09;是完全可行的。这个拷贝过程只需要拷贝数据成员&#xff0c;而函数成员是共用的&#xff08;只有一份拷贝&#xff09;。在建立对…

1230天,百度再见!!!

从2020年7月8日至2023年11月20日&#xff0c;在百度的工作到达了终点&#xff0c;完成了从学生向职场人的蜕变&#xff0c;是时候说再见了&#xff01; 一、成长收获 在这1230天里收获颇丰&#xff0c;下面与各位分享一下。 从技术至上到业务赋能的思想转变 相信很多人都存在“…

一个完备的手游地形实现方案

一、地形几何方案&#xff1a;Terrain 与 Mesh 1.1 目前手游主流地形几何方案分析 先不考虑 LOD 等优化手段&#xff0c;目前地形的几何方案选择有如下几种&#xff1a; 使用 Unity 自带的 Terrain使用 Unity 自带的 Terrain&#xff0c;但是等美术资产完成后使用工具转为 M…

键盘快捷键工具Keyboard Maestro mac中文版介绍

Keyboard Maestro mac是一款键盘快捷键工具&#xff0c;它可以帮助用户通过自定义快捷键来快速完成各种操作&#xff0c;提高工作效率。Keyboard Maestro支持多种快捷键组合&#xff0c;包括单键、双键、三键、四键组合等&#xff0c;用户可以根据自己的习惯进行设置。此外&…

全志H616开发版

开发板介绍&#xff1a; 二、开发板刷机 SDFormatter TF卡的格式化工具、Win32Diskimager 刷机工具 刷机镜像为&#xff1a;Orangepizero2_2.2.0_ubuntu_bionic_desktop_linux4.9.170.img 使用MobaXterm_Personal_20.3连接使用 网络配置&#xff1a;nmcli dev wifi 命令接入网…

PLC梯形图实操——风扇正反转

文章目录 1.项目内创建函数块&#xff08;FB&#xff09;2.项目内创建数据块&#xff08;DB&#xff09;2.1去除优化块访问2.2去除优化块的访问后对数据块进行编译 3.在函数块&#xff08;FB&#xff09;内实现正转反转的自锁与互锁3.1在函数块内实现电机正反转的梯形图 4.主函…

Python的os.path.join()详解

当你需要构建文件路径时&#xff0c;os.path.join() 是一个很有用的方法。这个方法会根据你的操作系统使用正确的路径分隔符&#xff08;例如&#xff0c;在 Windows 上是反斜杠 \&#xff0c;在类 Unix 系统上是正斜杠 /&#xff09;来连接路径中的各个部分。这样你就可以确保…

Django实战:从零到一构建安全高效的Web应用

目录 一、概述 二、版本控制和部署 1、Git版本控制 2、Docker部署 三、数据库配置 1、配置数据库设置 2、创建数据库模型 四、URL路由和视图 1、定义URL路由 2、创建视图 五、模板渲染 1、创建模板 2、在视图中使用模板 总结 一、概述 Django是一个高级Python W…

HarmonyOS4.0系列——01、下载、安装、配置环境、搭建页面以及运行示例代码

HarmonyOS4.0应用开发 安装编辑器 这里安装windows版本为例 安装依赖 打开DevEco Studio 这八项全部打钩即可开始编写代码&#xff0c;如果存在x&#xff0c;需要安装正确的库即可 开发 点击Create Project 选择默认模板——next Model部分分为Stage和FA两个应用模型&…

[架构之路-247]:目标系统 - 设计方法 - 软件工程 - 结构化方法的基本思想、本质、特点以及在软件开发、在生活中的应用

目录 前言&#xff1a; 一、什么是非结构化方法 1.1 什么是非结构化方法 1.2 非结构化方法的适用场合 二、什么是结构化方法 1.1 结构化方法诞生的背景&#xff1a;软件规模发展&#xff1a;大规模、复杂系统的需要 1.2 概述 1.3 主要特点与核心思想 三、结构化方法在…

Windows 安装 Docker Compose

目录 前言什么是 Docker Compose &#xff1f;安装 Docker Compose配置环境变量结语开源项目 前言 在当今软件开发和部署领域&#xff0c;容器化技术的应用已成为提高效率和系统可移植性的关键手段。Docker&#xff0c;作为领先的容器化平台&#xff0c;为开发人员提供了轻松构…

【手撕数据结构】(三)顺序表和链表

文章目录 一、线性表二、顺序表1.概念及结构2.关于数组3.顺序表分类&#x1f397;️静态顺序表&#x1f397;️动态顺序表 4.接口实现&#xff08;1&#xff09;思路&#xff08;2&#xff09;SeqList.h文件代码功能1&#xff1a;顺序表初始化功能2&#xff1a;销毁顺序表功能3…

硬盘Write Cache设置效果差异之谜!

Write Cache这个概念对于大家应该不陌生&#xff0c;主要是机械HDD中会有很明显的效果。 Write Cache Enable&#xff0c;WCE&#xff1a;数据不会直接落盘&#xff0c;而是写入DRAM缓存后就直接返回了&#xff0c;对于随机写和顺序写的性能都会有所改善。这个场景&#xff0c;…

el-table 对循环产生的空白列赋默认值

1. el-table 空白列赋值 对el-table中未传数据存在空白的列赋默认值0。使用el-table 提供的插槽 slot-scope&#xff1a;{{ row || ‘0’ }} 原数据&#xff1a; <el-table-column label"集镇" :propcity ><template slot-scope"{row}">{{…

机器学习-笔记

绪论 参考期刊 ICCV 偏向视觉CVPR 偏向MLIAAA AI原理ICML 参考链接 CSDN 机器学习知识点全面总结 课堂内容学习-0912-N1 对于特征提取&#xff0c;简而言之就是同类聚得紧&#xff0c;异类分得开&#xff1b;   detection研究的是样本二分类问题&#xff0c;即分为正样本…

【ArcGIS Pro微课1000例】0033:ArcGIS Pro处理cad数据(格式转换、投影变换)

文章目录 一、cad dwg转shp1. 导出为shp2. cad至地理数据库3. data interoperability tools二、shp投影变换一、cad dwg转shp 1. 导出为shp 加载cad数据,显示如下: 选择需要导出的数据,如面状,右键→数据→导出要素: 导出要素参数如下,点击确定。 导出的要素不带空间参…

“非旺玖原装的PL2303,.........“解决办法

"非旺玖原装的PL2303&#xff0c;…"解决办法 windows安装PL2303串口驱动提示“非旺玖原装的PL2303&#xff0c;请联系您的供货商”的解决办法&#xff1a; 主要原因&#xff1a;驱动版本无法兼容&#xff0c;需要降低使用版本 解决办法&#xff1a; 1.插好串口线&…

某60区块链安全之不安全的随机数实战二学习记录

区块链安全 文章目录 区块链安全不安全的随机数实战二实验目的实验环境实验工具实验原理实验内容EXP利用 不安全的随机数实战二 实验目的 学会使用python3的web3模块 学会以太坊不安全的随机数漏洞分析及利用 实验环境 Ubuntu18.04操作机 实验工具 python3 实验原理 由…

Vue - Router

一、概述 路由 所谓路由&#xff0c;就是决定起点到终点的路径的进程。而在前端工程中&#xff0c;路由指的是根据不同的访问路径&#xff0c;展示不同组件的内容 Vue官方提供的路由功能叫 Vue-Router 二、如何使用 步骤 1、安装vue-router npm install router4 4是指第四个…