论Shell编程规范与变量

news2024/10/6 4:14:21

目录

一:shell脚本

1.shell概述

2.linux中包含的常用shell

3.shell脚本概述

4.shell脚本应用场景

5.shell脚本的作用

6.用户的登录shell

二: 编写脚本

1.脚本的基本格式

 2.shell脚本的执行

3. 交互式硬件设备

4.重定向操作

5.管道操作符号 “|”

 三:shell变量

1.变量的作用

2.变量的类型

3.定义新变量

4.赋值时使用引号

 5. 从键盘输入内容为变量赋值

 6.设置全局变量

7.整数变量

 8.环境变量

 9.只读变量

10.位置变量

​11.预定义变量

总结:


一:shell脚本

1.shell概述

shell是一个命令解释器,它是介于系统内核与用户之间,负责解释命令行,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户。这种对话方式可是交互也可以是非交互式的。

2.linux中包含的常用shell

(1)bash:基准于GNU的框架下发展出的shell

(2)csh:语法有点类似于c语言的shell

(3)tcsh:整合了csh,提供更多的功能

(4)sh:已经被bash所替换

(5)nologin:奇怪的shell,这个shell可以让用户无法登录主机

(6)bash(/bin/bash):是目前大多数linux版本采用的默认的shell

3.shell脚本概述

 shell脚本(shell script)就是将要执行的命令按顺序保存到一个文本文件并给该文件可执行权限,方便一次性执行的一个程序文件。主要是方便管理员进行设置或管理,可结合各种shell控制语句以完成更复杂的操作。常用于重复性操作、批量事物处理、自动化运维、服务运行状态监控、定时任务执行等。

4.shell脚本应用场景

(1)重复性操作

(2)交互性任务

(3)批量事务处理

(4)服务运行状态监控

(5)定时任务执行

5.shell脚本的作用

(1)自动化运维

(2)批量化重复操作可以编写脚本结合计划任务自动周期运行

(3)减轻管理员工作量

(4)提高处理文件文本的速度

(5)避免配置出错

6.用户的登录shell

登录后默认使用的shell程序,一般为/bin/bash,不同shell的内部指令、运行环境等会有所区别。

[root@localhost ~]# cat /etc/shells

二: 编写脚本

1.脚本的基本格式

(1)脚本申明(解释器):若第一行为 "#!/bin/bash” ,表示此行以下的代码语句是通过 /bin/bash程序来执行,#!/bin/bash 为默认解释器。还有其他类型的解释器,比如     #!/usr/bin/python、 #!/usr/bin/expect。

(2)注释信息:以 "#" 开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行。

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

 2.shell脚本的执行

(1)方法一:指定路径的命令,要求文件必须有 x 权限

chmod +x /root/first.sh
指定绝对路径:/root/first.sh
指定相对路径:./first.sh

注:系统会自动创建一个子shell环境去运行,但是当前shell环境不会受到影响。

(2)方法二:通过bash、sh命令执行

[root@localhost opt]# bash first.sh

[root@localhost opt]# sh first.sh

注:系统会自动创建一个子shell环境去运行,但是当前shell环境不会受到影响。 

(3)方法三:通过source命令执行

[root@localhost opt]# source first.sh
[root@localhost opt]# . first.sh


注:执行 source、“.”命令时,脚本在当前shell环境运行,会受到影响,切换目录

3. 交互式硬件设备

类型

设备文件

文件描述编号

默认设备

标准输入

/dev/stdin

0

键盘

标准输出

/dev/stdout

1

显示器

标准错误输出

/dev/stderr

2

显示器

(1)标准输入:从该设备接收用户输入的数据

(2)标准输出:通过该设备向用户输出数据

(3)标准错误:通过该设备报告执行出错信息

4.重定向操作

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

(1)重定向输入

 (2)重定向输出

(3)标准错误输出

(4)混合输出

(5)混合输出 2>&1

2指向1,2的错误信息和1一起指向指定的文间 

5.管道操作符号 “|”

将左侧的命令输出结果,作为右侧命令的处理对象

 三:shell变量

1.变量的作用

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

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

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

2.变量的类型

自定义变量:由用户自己定义、修改和使用

特殊变量:环境变量、只读变量、位置变量、预定义变量

3.定义新变量

变量名以字母或下划线开头,区分大小写,建议全大写

变量名=变量值  #定义一个新的变量  例:a=1
echo $变量名  #查看变量的值 例:echo $a

4.赋值时使用引号

双引号:允许通过$符号引用其他变量值

单引号:禁止引用其他变量值,$视为普通字符

反撇号:命令替换,提取命令执行后的输出结果

 

5. 从键盘输入内容为变量赋值

read [-p “提示信息”] 变量名

 

 

 

 6.设置全局变量

(1)临时全局变量

设置临时全局变量后,重启后变量就没了

格式1:export 变量名...
格式2:export 变量名=变量值...

 (2)永久全局变量

设置永久全局变量后,重启后变量依旧在

7.整数变量

expr 变量1 运算符 变量2 [运算符 变量3]...
echo $((变量1 + 变量2))
echo $[变量1 + 变量2]
let i++
let ++i

 常用运算符:

加法运算:+

减法运算:-

乘法运算:\*

除法运算:/

求模(取余)运算:%

 

 8.环境变量

由系统提前创建,用来设置用户的工作环境,配置文件:/etc/profile、~/.bash_profile

常见的环境变量:

  1. PATH:指定可执行程序的搜索路径。
  2. HOME:指定当前用户的家目录。
  3. LANG:指定当前系统的语言环境。
  4. SHELL:指定当前Shell的路径。
  5. PS1:指定Shell提示符的格式。
  6. PWD:指定当前工作目录。
  7. TERM:指定当前终端的类型。
  8. USER:指定当前用户的用户名

 将opt目录下的文件加入到变量中,其中可执行文件在全局中直接使用,无需调用。

也可创建软链接 进行环境变量配置 

 

 9.只读变量

#用于变量值不允许被修改的情况
readonly name

10.位置变量

 

想要有10以上的数,需在变量两边加上{} 

 11.预定义变量

$#:表示命令行中位置参数的个数。
$*:表示所有位置参数的内容,这些内容当做一个整体
$@:表示列出所有位置参数,但是是以单个的形式的列出
$?:表示前一条命令执行后的返回状态,返回值为О表示执行正确,返回任何非О值均表示执行出现异常。
$0:表示当前执行的脚本或程序的名称
$$:表示返回当前进程的进程号
$!:返回最后一个后合进程的进程号

 

总结:

 Shell脚本的内容构成:环境声明、注释文字、执行语句
重定向包括重定向输入、重定向输出、错误重定向
定义或赋值变量时,采用“变量名=变量值”的格式
赋值操作还可以使用单引号、双引号、反撇号、read命令等方式
查看或引用变量的值时,采用“$变量名”的格式
常见的特殊变量包括环境变量、只读变量、位置变量、预定义变量
 

 

 

 

 

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

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

相关文章

信号完整性分析基础知识之传输线和反射(一):阻抗变化引起反射

阻抗不连续引起的反射和失真可能会导致信号的误触发和误码&#xff0c;这是导致信号失真和质量下降的主要原因。 在某些情况下&#xff0c;这看起来像振铃。当信号电平下降时&#xff0c;下冲会影响噪声预算并导致误触发。或者&#xff0c;在下降信号上&#xff0c;峰值可能会上…

阅读笔记 First Order Motion Model for Image Animation

文章解决的是图片动画的问题。假设有源图片和驱动视频&#xff0c;并且其中的物体是同一类的&#xff0c;文章的方法让源图片中的物体按照驱动视频中物体的动作而动。 文章的方法只需要一个同类物体的视频集&#xff0c;不需要而外的标注。 方法 该方法基于self-supervised策…

Qt信号槽原理

Qt之信号槽原理 一.概述 所谓信号槽&#xff0c;实际就是观察者模式。当某个事件发生之后&#xff0c;比如&#xff0c;按钮检测到自己被点击了一下&#xff0c;它就会发出一个信号&#xff08;signal&#xff09;。这种发出是没有目的的&#xff0c;类似广播。如果有对象对这…

idea无效的目标版本和类文件具有错误的版本 61.0, 应为 52.0错误(测试有用,一次性解决问题)

SpringBoot己更新到3后&#xff0c;使用的JAVA版本最低要求JAVA17&#xff0c;如果低于这个版本就是报错&#xff1a; 问题一&#xff1a;类文件具有错误的版本 61.0, 应为 52.0。 解决就只有升级JAVA-sdk&#xff1a; 官方下载地址&#xff1a;JAVA20-17 官方推荐更好的sd…

MySQL 视图、函数和存储过程

MySQL 是一种流行的关系型数据库管理系统&#xff0c;其具有强大的功能和灵活性&#xff0c;使其成为了许多企业和个人喜爱的数据库选择。在 MySQL 中&#xff0c;视图、函数和存储过程是常见的数据库对象&#xff0c;它们都有助于提高数据的处理效率和可重用性。 一、视图 视…

UE5实现Runtime环境下绘制点功能

文章目录 1.实现目标2.实现过程2.1 C++实现2.2 蓝图调用3.参考资料1.实现目标 UE5在Runtime环境下基于PDI绘制点,GIF动态如下: 2.实现过程 UE常用的在运行时环境下绘制点方法主要有两种。一种是基于Mesh,即添加Sphere等StaticMesh来模拟显示绘制点;另一种是基于Primitive的…

用代码实现标签打印的三种方式

最近项目中要实现标签打印的功能&#xff0c;有几个条件 标签模板可以事先生成&#xff0c;用的是CodeSoft软件标签模板里面有二维码标签模板里面有一些变量&#xff0c;要求打印的时候自动填充产线电脑上没有安装CodeSoft&#xff0c;即便安装也不能使用&#xff0c;因为没有…

Java线程池及拒绝策略详解

前文提到线程的使用以及线程间通信方式&#xff0c;通常情况下我们通过new Thread或者new Runnable创建线程&#xff0c;这种情况下&#xff0c;需要开发者手动管理线程的创建和回收&#xff0c;线程对象没有复用&#xff0c;大量的线程对象创建与销毁会引起频繁GC&#xff0c;…

Unity入门(一)

Unity Unity是一套完善体系与编辑器的跨平台游戏开发工具&#xff0c;也可以称之为游戏引擎。游戏引擎是指一些编写好的可以重复利用的代码与开发游戏所用的各功能编辑器。 基于C#编程&#xff0c;易上手&#xff0c;高安全性独特的面向组件游戏开发思想让游戏开发更加简单易…

Maven 如何下载依赖包的源码包

使用Maven下载依赖包的时候&#xff0c; 默认是不会下载源码包的&#xff0c;但是有时候&#xff0c; 需要Debug代码&#xff0c;或是看看依赖项的源码的写法&#xff0c; 就需要下载源码包了。 这里以 Apache 的 commons-text 为例&#xff0c; 在Maven中添加如下依赖配置&am…

pwlink用作USB转TTL,进入HC-05的AT模式

不说废话的文章概括&#xff1a; 直接连接PWLINK与HC-05&#xff0c;无法进入AT模式&#xff0c;因为蓝牙模块的VCC只能接5V&#xff0c;不能接3.3V&#xff0c;而且PWLINK有两个VDD引脚&#xff0c;且两个VDD引脚初始默认输出电压都是3.3V&#xff0c;所以需要将3.3V改为5V的…

【JavaEE】网络通信中的一些基本概念及协议分层

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶 互联网是怎么来的&#xff1f;很多先进技术&#xff0c;都是先军用&#xff0c;用了之后太香了才逐渐民用~~ 互联网也是如此&#xff0c;互联网之前&#xff0c;可以通过有线/无线&#xf…

单链表——“数据结构与算法”

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰的内容终于是我们心心念念的单链表啦&#xff0c;这一块呢&#xff0c;是一个很重要的部分&#xff0c;也是一个对目前的我来说&#xff0c;比较困难的部分&#xff0c;下面&#xff0c;就让我们进入单链表的世界吧 之…

【unity项目实战】3DRPG游戏开发04——导航、人物移动和鼠标指针图片替换

AI导航烘培 还不清楚怎么用的可以看我另一篇文章 零基础带你从小白到超神29——导航系统 将地形调成静态导航的 选中地形,设置为可行区域 点击烘培 可爬坡改为30度,就会发现坑就变为不可行区域了 选择所有的树,为不可行区域,点击烘培 给主角人物添加导航组件

Kafka3.0.0版本——生产者数据可靠性

目录 一、ACK应答原理1.1、应答级别1.1.1、acks 01.1.2、acks 11.1.3、acks -1&#xff08;all&#xff09; 1.2、问题思考 二、数据可靠性2.1、数据可靠性分析2.2、 数据完全可靠条件2.3、ACK应答级别可靠性总结 三、数据可靠性代码示例 一、ACK应答原理 1.1、应答级别 1…

一日一题:第十二题---模拟散列表(三种方法!!)

​作者&#xff1a;小妮无语 专栏&#xff1a;一日一题 &#x1f6b6;‍♀️✌️道阻且长&#xff0c;不要放弃✌️&#x1f3c3;‍♀️ 今天来给大家介绍的是简单的Hash表的应用 目录 关于哈希的知识点 题目描述&#xff08;模拟散列表&#xff09; 代码 1&#xff08;拉链…

基于GPT-4的神仙插件Bito,亲测好用

基于GPT-4的神仙插件&#xff0c;无需魔法,目前免费 一、Bito 简介 最近发现一个可以有效提升coding效率的插件神器&#xff0c;截止当前(20230425)已有65k的下载量了&#xff01; 类似与Cursor一样&#xff0c;可以使用AI辅助写代码&#xff0c;但是又解决Cursor没有语法提…

力扣刷题day35|416分割等和子集

416. 分割等和子集 力扣题目链接 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 示例 1&#xff1a; 输入&#xff1a;nums [1,5,11,5] 输出&#xff1a;true 解释&#xff1a;数组可以分割…

keil设置程序起始地址及生成bin文件的方法

一.keil设置程序起始地址 1.1FLASH APP 的起始地址设置 随便打开一个之前的实例工程&#xff0c;点击 Options for Target→Target 选项卡 默认的条件下&#xff0c;图中 IROM1 的起始地址&#xff08;Start&#xff09;一般为 0X08000000&#xff0c;大小&#xff08;Size&a…

通用el-table 修改样式

通用el-table 修改样式 el-table实现下图效果: <template><div class"contentbox"><el-table:data"tableData"height"310"style"width: 40%"highlight-current-rowcurrent-change"handleCurrentChange"&g…