当前位置:网站首页>Shell编程规范与变量
Shell编程规范与变量
2022-06-22 17:55:00 【成为最好的梅西】
目录
1、Shell脚本的概念
- 将要执行的命令按顺序保存到一个文本文件
- 给该文件可执行权限
- 可结合各种Shell控制语句以完成更复杂的操作
2、Shell脚本应用场景
- 重复性操作
- 交互性任务
- 批量事物处理
- 服务进行状态监控
- 定时任务执行
- .......
3、Shell的作用——命令翻译器,“翻译官”
- 介于系统内核与用户之间,负责解释命令行

二、用户的登录shell

三、shell脚本的构成
- 脚本申明(解释器):若第一行为“#!/bin/bash” ,表示此行一下的代码语句是通过/bin/bash程序来结实执行,#!/bin/bash为默认解释器,还有其他类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect。
- 注释信息:以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时将不被执行。
- 可执行语句:比如echo命令,用于输出“ ”之间的字符串。
四、shell脚本的执行
方法一:脚本文件路径(绝对路径与相对路径)

方法二:sh 脚本文件路径

方法三: source 脚本文件路径

五、重定向
1、重定向——交互式硬件设备
| 类型 | 设备文件 | 文件描述编号 | 默认设备 |
| 标准输入 | /dev/stdin | 0 | 键盘 |
| 标准输出 | /dev/stdout | 1 | 显示器 |
| 标准错误输出 | /dev/stderr | 2 | 显示器 |
2、重定向——重定向操作
| 类型 | 操作符 | 用途 |
| 重定向输入 | < | 从指定的文件读取数据 |
| 重定向输出 | > | 将标准输出结果 保存 到指定的文件,并且覆盖原有内容 |
| >> | 将标准输出结果 追加 到指定的文件的尾部,不覆盖原有内容 | |
| 标准错误输出 | 2> | 将错误信息 保存 到指定的文件,并且覆盖原有内容 |
| 2>> | 将错误信息 追加 到指定的文件的尾部,不覆盖原有内容 | |
| 混合输出 | &> | 将标准输出、标准错误保存到同一文件中 |
| 2>&1 | 将标准错误输出重定向到标准输出 |


六、Shell脚本变量
1、变量的作用
- 用来存放系统和用户需要使用的特定参数(值)
- 变量名:使用固定的名称,由系统预设或用户定义
- 变量值:能够根据用户设置、系统环境的变化而变化
2、变量的分类
- 自定义变量:由用户自己定义、修改和使用
- 环境变量:由系统维护,由于设置工作环境
- 只读变量:用于变量值不允许被修改的情况
- 位置变量:通过命令行给脚本程序传递参数
- 预定义变量:bash中内置的一类变量,不能直接修改
七、自定义变量
1、定义新变量:

- 命名规则:以字母或下划线开头,区分大小写(建议大写)
2、查看变量的值:

3、赋值时使用引号
| 双引号 | 允许通过$符号引用其他变量值 |
| 单引号 | 禁止引用其他变量值, $视为普通字符 |
| 反撇号 | 命令替换,提取命令执行后的输出结果,``和$(…)作用相同 |

4、read命令获取输入内容
- 方法一:
read -p "提示信息" 变量名 echo $"变量名"
- 方法二:
echo -n "提示信息" read 变量名 echo $变量名
5、变量作用范围
- 默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。当进入子程序或新的子Shell环境时,局部变量将无法再使用。
- 可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用。
格式1:export 变量名
格式2:export 变量名=变量值
可以使用 pstree 命令查看Shell环境,输入 bash 命令进入子Shell环境,按Ctrl+D组合键或输入 exit 命令退出子Shell环境。
6、整数变量的运算
格式:expr 变量1 运算符 变量2 (运算符 变量3)
运算符: + 加法、- 减法、* 乘法、/ 除法、% 取余
常用的运算表达式:
i=$(expr 10 \* 3)
i=$((10 * 3))
i=$[10 * 3]
let i=10*3
i++ 相当于 i=$[$i+1]
i-- 相当于 i=$[$i-1]
i+=2 相当于 i=$[$i+2]
7、浮点运算(需借助bc,awk处理)
①、bc


②、awk


八、环境变量
- 使用 env 命令可以查看到当前工作环境下的环境变量
- 变量USER表示用户名称,HOME表示用户的宿主目录,LANG表示语言和字符集,PWD表示当前所在的工作目录,变量PATH表示可执行程序的默认搜索路径。

九、只读变量
- 用于变量不允许被修改的情况

十、位置变量
- 当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。
- $n:n为数字,$0代表命令本身,1~9代表第一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为 ${10}。


十一、预定义变量
$*、[email protected]:表示命令或脚本要处理的参数。
$*:把所有参数看成以空格分隔的一个字符串整体,代表"$1 $2 $3 $4"。
[email protected]:把各个参数加上双引号分隔成n份的参数列表,每个参数是独立 的,代表"$1" "$2" "$3" "$4"。
$0:表示当前执行的脚本或命令的名称。
$#:表示命令或脚本要处理的参数的个数。
$?:表示前一条命令或脚本执行后的返回状态码,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。


边栏推荐
- JVM快速入门
- Exness sorted out three problems to be solved in Musk's acquisition of Twitter
- Notes on Combinatorics (V) chains in distributive lattice
- 消息中间件(一)MQ详解及四大MQ比较
- 实现领域驱动设计 - 使用ABP框架 - 解决方案概览
- 【建议收藏】消息队列常见的使用场景
- Golang实现基于Redis的可靠延迟队列
- Modèle de langage de pré - formation, Bert, roformer Sim aussi connu sous le nom de simbertv2
- Mise en œuvre de redis par golang (10): transactions atomiques locales
- chrome突然无法复制粘贴了
猜你喜欢

IPLOOK 5GC与亚信国际CHF(计费功能)对接成功

智能家居不知如何选?不妨看下这篇选购指南

Cookie encryption 3+rpc solution

Flutter系列-搭建Flutter开发环境

牛客网:判断是否为回文字符串

消息中间件(一)MQ详解及四大MQ比较

session机制详解以及session的相关应用

2022 operation of simulated examination platform for examination question bank of welder (elementary) special operation certificate

5G 短消息解决方案

维智科技亮相西部数博会,时空AI技术获高度认可
随机推荐
centerOS 安装mangodb
第八届 GopherChina 大会蓄势待发!
Golang实现基于Redis的可靠延迟队列
5G 短消息解决方案
IPLOOK 成为 RedHat(红帽)业务合作伙伴
Error in created hook: “TypeError: Cannot read property ‘tableId‘ of undefined“
最长公共子序列
SystemVerilog (12) - $unit declaration space
Detailed explanation of session mechanism and related applications of session
函数的导数与微分的关系
IPLOOK 5GC与亚信国际CHF(计费功能)对接成功
Cluster, distributed and microservice concepts and differences
org. apache. ibatis. binding. BindingException: Invalid bound statement (not found)
泡泡玛特:空洞的灵魂需要故事
使能伙伴,春节重大保障“不停歇”
STM32 control matrix key, Hal library, cubemx configuration
2022 Chongqing preschool education industry exhibition 𞓜 hi tech Toy Puzzle decompression Toy Expo
RobotFramework 安装教程
Chrome suddenly can't copy and paste
实现领域驱动设计 - 使用ABP框架 - 解决方案概览

