当前位置:网站首页>Shell脚本——Shell编程规范及变量
Shell脚本——Shell编程规范及变量
2022-04-23 16:53:00 【Kiro君】
Shell编程规范及变量
一、Shell脚本概述
1.1.1 Shell基本概念
- 将要执行的命令按顺序保存到一个文本文件
- 给该文件可执行权限
- 可结合各种Shell控制语句以完成更复杂的操作
1.1.2 Shell脚本应用场景
- 重复性操作
- 交互性任务
- 批量事务处理
- 服务运行状态监控
- 定时任务执行
1.1.3 Shell作用——翻译官
shell是一个特殊的应用程序,它介于操作系统内核和用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。
二、shell编程规范
2.1 用户登录shell
- 登录后默认使用的shell程序,一般为/bin/bash
- 不同shell的内部指令、运行环境等会有所不同
shell | 说明 |
---|---|
bash | $基准于GNU的框架下发展出的shell |
csh | 语法有点类似于C语言的shell |
tcsh | 整合了csh,提供更多的功能(增强版) |
sh | 已经被bash所替换(软链接) |
nologin | 奇怪的shell,这个shell可以让用户无法登录主机 |
2.2 shell脚本的组成
- 脚本申明(解释器): 若第一行为“#!/bin/bash”,表示此行一下的代码语句是通过/bin/bash程序来结实执行,#!/bin/bash为默认解释器,还有其他类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect。
- 注释信息:以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时将不被执行。
- 可执行语句: 比如 echo命令,用于输出“ ”之间的字符串。
2.3 shell脚本的执行方法
方法一:指定路径的命令,要求文件必须有x权限
- 指定绝对路径:/root/first.sh
- 指定相对路径:./first.sh
方法二:指定shell来解释脚本,不要求文件必须有x权限
- sh 脚本路径:sh first.sh
- source 脚本路径:.first.sh 或者source first.sh
方法三:source 脚本路径执行shell脚本
2.4 脚本错误
命令错误:命令出错不会影响接下来的命令继续
语法错误:会影响接下来的命令继续
逻辑错误:只能自己去筛查
查找代码的正确:
bash -n 脚本名称 (不在当前目录下加绝对路径) 检查语法错误
bash -x 脚本名称 (不在当前目录下加绝对路径) 检查逻辑错误
2.5 重定向
交互式硬件设备
标准输入:从该设备接收用户输入的数据
标准输出:通过该设备向用户输出数据
标准错误:通过该设备报告执行出错信息
类型 | 设备文件 | 文件描述编号 | 默认设备 |
---|---|---|---|
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
重定向操作
类型 | 操作 | 用途 |
---|---|---|
重定向输入 | < | 从指定文件读取数据 |
重定向输出 | > | 将标准输出结果保存到指定的文件,并且覆盖原有文件 |
>> | 将标准输出追加到指定的文件的尾部,不覆盖原有内容 | |
标准错误输出 | 2> | 将错误信息保存到指定文件,并且覆盖原有文件 |
2>> | 将错误信息追加到指定文件的尾部,不覆盖原有内容 | |
混合输出 | &>和2>&1 | 将标准输出,标准错误保存到同—文件中 |
案例一
将标准输出结果“132456” 保存到文件 passwd.txt; 然后标准输入密码给niangao的时候,从指定文件 passwd.txt中读取数据:
案例二
“>” 会覆盖原有文件
“>>” 不会覆盖原有文件
案例三:&用法
2>/dev/null ##把错误输出到黑洞
>/dev/null 2>&1 ##标准输出重定向到黑洞,错误输出2重定向到标准输出(标准输出和错误输出都到黑洞)
2>&1>/dev/null ##错误输出重定向到标准输出,标准输出进黑洞
补充
2.6 管道操作
将管道符号 “|” 左侧的命令输出的结果,作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道
使用格式:
cmd1 命令1 | cmd2 命令2[… | cmdn 命令n]
管道操作
awk -F: '{print $1,$3}' ##意为强制输出信息并且打印第一列和第三列
三、Shell 脚本变量
各种Shell环境中都是用到了“变量”的概念。Shell变量用来存放系统和用户需要使用的特定参数值。
变量的作用
用来存放系统和用户需要使用的特定参数(值)
变量名: 使用固定的名称,由系统预设或用户定义
变量值: 能够根据用户设置、系统环境的变化而变化
变量的类型
自定义变量: 由用户自定义、修改和使用
特殊变量: 环境变量,只读变量,位置变量,预定义变量
环境变量:由系统维护,用于设置工作环境
只读变量: 用于变量值不允许被修改的情况
位置变量:通过命令行给脚本程序传递参数
预定义变量:bash中内置的一类变量,不能直接修改
3.1 自定义变量
1.定义新的变量:
格式: 变量名=变量值
[root@pxw ~]# product=c++
2.查看定义的变量的值:
格式:echo $变量名
[root@pxw ~]# version=3.5.1
3.变量赋值的特殊操作
引号 | 说明 |
---|---|
双引号 | 允许通过$符号引用其他变量 |
单引号 | 禁止引用其他变量值,$视为普通字符 |
反撇号 | 命令替换,提取命令执行后的输出结果 |
4.read命令
--------方法一:read命令获取输入内容---------
read [-p "提示信息"] 变量名
echo $变量名
[root@pxw ~]# echo 192.168.61.128 > ip.txt
[root@pxw ~]# read -p "input your IP" < ip.txt
[root@pxw ~]# echo $IP
192.168.100.10
--------方法二:在脚本中编写,在命令行实现read获取---------
read 变量名
echo $变量名
方法一:
方法二:
5.设置变量的作用范围
export 变量名=变量
3.1.1 数值变量的运算
运算符:+ 加法、- 减法、* 乘法、/除法、% 取余
expr 变量1 运算符 变量2
var=$(expr 变量1 运算符 变量2)
var=$((变量1 运算符 变量2))
var=$[变量1 运算符 变量2]
let var=变量1 运算符 变量2
i++相当于i=$[$i + 1],i++是先赋值,再运算
i--相当于i=$[$i - 1],++i是先运算再赋值
i+=1相当于i=$[$i + 1]
----扩充-----
[root@Kiro shell]# expr $[2 * 2] ##在中括号中可以直接用正常运算符
案例一:取余只需要除后的余数
#法一
[root@localhost data]#expr 3 % 2
1
#法二:定义变量,使用反撇号
[root@Kiro shell]# sum=`expr $X + $X + $Y`
[root@Kiro shell]# echo $sum
301
案例二:乘号的扩展
案例三:脚本
3.2 环境变量
环境变量指的是出于运行需要而由Linux系统提前创建的一类变量,主要用于设置用户的工作环境,包括用户宿主目录、命令查找路径、用户当前目录、登录终端等。环境变量由Linux系统自动维护,会随着用户状态的改变而改变:
- 如果修改之后,(uname) ,重启就可以恢复原样;
- 或者把之前的复制过来直接赋值变量
通过env命令进行查看,都是设定好的:
HOSTNAME=Kiro
SHELL=/bin/bash
HISTSIZE=1000
USER=root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root/shell
案例:
3.3 位置变量
为了使用Shell脚本程序时,方便通过命令行为程序提供参数,bash引入了位置变量的概念。
[root@Kiro shell]# cat vars.sh
#!/bin/bash
echo $1
echo $2
echo $3
[root@Kiro shell]# ./vars.sh 11 22 cc
11
22
cc
案例:
3.4 预定义变量
与定义变量是bash预先定义好的一类特殊变量,只能使用不能创建新的:
$# :表示命令行中位置参数的个数
$*: 表示所有未知参数的内容
$?: 表示前一条命令执行后的返回状态,为0表示执行正确,非0表示执行出现异常;
$0: 表示当前执行的脚本或程序的名字
$$: 表示当前脚本的进程号
案例:
3.5 使用awk值提取IP值
[root@Kiro shell]# ip=`ifconfig ens33|awk /netmask/'{print $2}'`
[root@Kiro shell]# echo $ip
192.168.61.100
3.6 全局变量与局域变量
- 全局变量
全局变量用 export
[root@Kiro ~]# export Y=22
[root@Kiro ~]# echo $Y
22
- 局域变量
局域变量只在当前有效
[root@Kiro ~]# a=100
[root@Kiro ~]# echo $a
100
[root@Kiro ~]# exit
exit
[root@Kiro ~]# echo $a
可在pstree里查看子变量
【扩充】
- uname -p ##查询处理器型号
- /dev/null ##空洞,错误输出可以放进去
- 命令行输入“bc”==Linux的计算机
- 永久 /etc/profile
版权声明
本文为[Kiro君]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_61744194/article/details/124313677
边栏推荐
- ◰GL-阴影贴图核心步骤
- Pycham connects to the remote server and realizes remote debugging
- ACL 2022 | dialogved: a pre trained implicit variable encoding decoding model for dialogue reply generation
- 关于 background-image 渐变gradient()那些事!
- VLAN高级技术,VLAN聚合,超级Super VLAN ,Sub VLAN
- MySQL master-slave replication
- 昆腾全双工数字无线收发芯片KT1605/KT1606/KT1607/KT1608适用对讲机方案
- Execution plan calculation for different time types
- 阿里研发三面,面试官一套组合拳让我当场懵逼
- org. apache. parquet. schema. InvalidSchemaException: A group type can not be empty. Parquet does not su
猜你喜欢
Phpstudy V8, a commonly used software for station construction 1 graphic installation tutorial (Windows version) super detailed
【PIMF】OpenHarmony啃论文俱乐部—在ACM Survey闲逛是什么体验
DanceNN:字节自研千亿级规模文件元数据存储系统概述
How much do you know about the process of the interview
Use if else to judge in sail software - use the title condition to judge
Quick install mongodb
Project framework of robot framework
如何建立 TikTok用户信任并拉动粉丝增长
True math problems in 1959 college entrance examination
MySql主从复制
随机推荐
Set the color change of interlaced lines in cells in the sail software and the font becomes larger and red when the number is greater than 100
◰GL-着色器处理程序封装
Nodejs reads the local JSON file through require. Unexpected token / in JSON at position appears
Dancenn: overview of byte self-developed 100 billion scale file metadata storage system
About stream flow, write it down briefly------
如何建立 TikTok用户信任并拉动粉丝增长
MySQL master-slave synchronization pit avoidance version tutorial
ACL 2022 | dialogved: a pre trained implicit variable encoding decoding model for dialogue reply generation
信息摘要、数字签名、数字证书、对称加密与非对称加密详解
批量制造测试数据的思路,附源码
5分钟NLP:Text-To-Text Transfer Transformer (T5)统一的文本到文本任务模型
Use case labeling mechanism of robot framework
File upload and download of robot framework
[pimf] openharmony paper Club - what is the experience of wandering in ACM survey
◰GL-阴影贴图核心步骤
1959年高考数学真题
Gartner announces emerging technology research: insight into the meta universe
Query the data from 2013 to 2021, and only query the data from 2020. The solution to this problem is carried out
MySQL restores data through binlog file
ACL 2022 | DialogVED:用于对话回复生成的预训练隐变量编码-解码模型