当前位置:网站首页>Shell programming specification and variables
Shell programming specification and variables
2022-08-10 22:00:00 【Guannan cattle x people】
目录
ShellScenarios for scripting applications
Give the text executable permission
Use of redirection and the pipe symbol
Shell脚本概述
什么是Shell
Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户.这种对话方式可是交互也可以是非交互式的,我们所输入的命令计算机是不识别的,这时就需要一种程序来帮助我们进行翻译,变成计算机能识别的二进制程序,同时又把计算机生成的结果返回给我们.
shell脚本的概念
将要执行的命令按顺序保存到一个文本文件
给文件可执行权限
可结合各种shelll控制语句以完成更复杂的操作
ShellScenarios for scripting applications
重复性操作
exchange tasks
批量事务处理
服务运行状态监控
定时任务执行
等等.......
Shell的作用
Shell的作用——命令解释器.“翻译官”
介于系统内核与用户之间,负责解释命令行

Linux系统中的Shell是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个"命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果.
常见的Shell解释器程序有很多种,使用不同的Shell时,其内部指令、命令行提示符等方面会存在一些区别. 通过/etc/shells 文件可以了解当前系统所支持的Shell脚本种类.

linux中常见的shell
bash:基于gun的框架下发展的shell
csh:类似c语言的shell
tcsh:整合了csh提供了更多功能
sh:已经被bash替换
nologin:让用户无法登录
注:bash (/bin/bash) 是目前大多数Linux版本采用的默认shell
用户的登录shell
登录后默认使用的shell程序,一般为 /bin/bash
不同shell的内部指令,运行环境等会有所区别

编写shell脚本
什么是shell脚本
就是将命令按顺序一一列出,最后自动执行
执行需要权限,也可以直接使用绝对路径
脚本其实不复杂,通用脚本环境改变后依然可以使用的脚本
shell脚本的作用
自动化运维
Batch repetitive operations can be programmed to run automatically and periodically in conjunction with scheduled tasks
减轻管理员工作量
提高处理文本文件的速度
避免配置出错
shell是一个面向字符串的编程语言,可以跟Python之类的其他语言配合起来,比如某个复杂的功能使用一个Python脚本来实现,然后再shell中调用这个脚本实现较复杂的功能;或者反过来,在Python脚本中调用外部的shell脚本来提高自动化的效率,也是可以的
Composition of shell scripts:
1、脚本申明(解释器) :If the first line 为“#!/bin/bash",表示此行以下的代码语句是通过/bin/bash程序来解释执行,#!/bin/ bash为默认解释器.还有其它类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect.
2、注释信息:以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行.
3、可执行语句:比如echo命令,用于输出”"之间的字符串
Shell脚本编程规范
创建Shell 程序的步骤
- 创建一个包含命令和控制结构的文件.
- 编辑完之后修改这个文件的权限使它可以执行 /使用chmod +x 文件名
- 检测语法错误(命令集合是否正确) /set -x 追踪脚本是否有故障
- 执行脚本./zmj.sh
Start writing the script code
使用vim文本编辑器
每行一条Linux命令,按执行顺序依次编写

没权限,So give permission below
Give the text executable permission
Make the script executable

执行脚本的方法
使用./脚本名称 执行脚本文件
方法一:脚本文件路径(绝对路径与相对路径)必须有x权限

Combined with the temporary increase above(再搞一个)


方法二:sh 脚本文件路径 不一定有x权限

方法三:source 脚本文件路径

方法四: . 脚本文件路径

方法五: . sh < 脚本文件路径

方法六:cat 脚本文件路径 管道符号 sh

方法七: bash 文件名.sh

Use of redirection and the pipe symbol
1、交互式硬件设备
标准输入:从该设备接收用户输入的数据
标准输出:通过该设备向用户输出数据
标准错误:Information about execution errors is reported through this device
| 类型 | 设备文件 | 文件描述编号 | 默认设备 |
| 标准输入 | /dev/stdin | 0 | 键盘 |
| 标准输出 | /dev/stdout | 1 | 显示器 |
| 标准错误输出 | /dev/stderr | 2 | 显示器 |
2、重定向操作
| 类型 | 操作符 | 用途 |
| 重定向输入 | < | 从指定的文件读取数据,而不是从键盘输入 |
| 重定向输出 | > | Save the output result to the specified file(覆盖原有内容) |
| >> | 将输出结果追加到指定的文件尾部 | |
| 标准错误输出 | 2> | Append error messages to the specified file(覆盖原有内容) |
| 2>> | 将错误信息追加到指定的文件中 | |
| 混合输出 | &> | 将标准输出、标准错误的内容保存到同一个文件中 |
Redirect output case/uname -p

Redirect input case

2、cat 命令会接受标准输入设备(键盘)的输入,并显示到控制台
cat <<0 //以0作为分界符,只要不输入0Data will always be entered and displayed on the screen
cat << 0 > a.txt
//可以把输入重定向和输出重定向结合使用,把从屏幕输出的内容保存到文件

错误重定向
错误重定向指的是将执行命令过程中出现的错误信息(如选项或参数错误等)保存到指 定的文件,而不是直接显示在屏幕上.错误重定向使用“2>”操作符
作用:
在实际应用中,错误重定向可用来收集程序执行的错误信息,为排错提供依据
还可以将无关紧要的错误信息重定向到空文件/dev/null 中,以保持脚本输出的简洁
使用“2>”操作符时,会像使用“>”操作符一样覆盖目标文件的内容,
若要追加内容而不是覆盖文件,则应改用“2>>”操作符
当命令输出的结果可能既包括标准输出(正常执行)信息,又包括错误输出信息时,可以使用操作符“>”“2>”将两类输出信息分别保存到不同的文件,也可以使用“&>”操作符将两类信息输出信息保存到同一个文件
/dev/null:把它看作"黑洞",所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然 而 /dev/null 对命令行和脚本都非常的有用
echo kgc > /dev/null
cat /dev/null #什么信息也看不到

&>和>&符号
&表示等同于的意思
例1:把正确和错误的消息输入到相同的位置
1>&2 把标准输出重定向到标准错误
2>&1 把标准错误重定向到标准输出



管道操作
Pipe symbol concept
管道(pipe)操作为不同命令之间的协同工作提供了一种机制,位于管道符号“|”左侧的命令输出的结果,将作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道.
在 Shell 脚本应用中,管道操作通常用来过滤所需要的关键信息.
$bash $表示系统提示符,$ 表示此用户为普通用户,超级用户的提示符是#,bash是shell的一种,是linux下最常用的一种shell,$bash的意思是执行一个子shell,此子shell为bash.

Shell变量的作用、类型
变量的作用
用来存放系统和用户需要使用的特定参数(值)
变量名:使用固定的名称,由系统预设或用户定义
变量值:能够根据用户设置、系统环境的变化而变化
变量的类型
自定义变量:由用户自己定义、修改和使用
特殊变量:环境变量,只读变量,位置变量,预定义变量
自定义变量
变量名=变量值 #变量名以字母或下划线开头,区分大小写,建议全大写
echo $变量名 #查看变量的值


echo选项
echo-n 表示不换行输出
使用echo -e输出转义字符,将转义后的内容输出到屏幕上
常用的转义字符如下:
\c不换行输出,在"\c"后面不存在字符的情况下,作用相当于echo-n
\n 换行
\t 转义后表示插入tab,即制表符
注:\转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符.如\s将输出“$”符号,而不当做是变量引用

Cancel the variable name
unset命令

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

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

3、反撇号(`):命令替换,提取命令执行后的输出结果
查找useradd的位置并列出其详细属性

使用反撇号难以在一行命令中实现嵌套命令替换操作,这时可以改用 “$()”来代替反撇号操作,以解决嵌套的问题
查询提供useradd命令程序的软件包所安装的配置文件的位置(从里到外先后执行替换)

查看当前日期

交互式定义变量
read 命令
使用 Bash 的内置命令 read 来给变量赋值.
用来提示用户输入信息,从而实现简单的交互过程.执行时将从标准输入设备(键盘)读入 一行内容,并以空格为分隔符,将读入的各字段依次赋值给指定的变量(多余的内容赋值给 最后一个变量).若指定的变量只有一个,则将整行内容赋值给此变量.
交互式定义变量(read)
-p 提示用户的信息
-n 定义字符数
-s Defines what to display user input,常用于输入密码 read -s -p "input your password:" pass
-t 定义超时时间,超过多长时间没输自动退出
read -p 提示信息 变量名 echo $变量名

设置变量的作用范围(export)
格式1:export 变量名...
格式2:export 变量名=变量值..
默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量.当进入子程序或新的子Shell环境时,局部变量将无法再使用
可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用.
可以使用 pstree 命令查看Shell环境
输入 bash 命令进入子Shell环境
按Ctrl+D组合键或输入 exit 命令退出子 Shell 环境

整数变量的运算(expr)
expr 变量1 运算符 变量2 [运算符 变量3]...
常用运算符
加法运算:+
减法运算:-
乘法运算:\*
除法运算:/
求模(取余)运算:%



Then you can do it directly,不用expr


A simple difference script
let命令
llet的运算可以改变变量本身的值,但不显示结果,需要echo,其他的运算方式可以做运算但不改变变量本身的值


let n++ #n自加1

let n-- #n自减1

bc运算
#scale=n 表示保留n位小数,是bcFormat requirements for calculations
使用bc进行运算,支持小数运算,但在脚本中不可直接使用否则会进入交互界面,可以用echo结合管道使用


特殊的shell 变量
环境变量
由系统提前创建,用来设置用户的工作环境
配置文件:/etc/profile 、~/.bash_profile
常见的环境变量
PWD、PATH、USER、SHELL、HOME
变量PWD:表示当前所在的工作目录
变量PATH:表示可执行程序的默认搜索路径
变量USER:表示用户名称
变量HOME:表示用户的宿主目录
LANG:表示语言和字符集
RANDOM:表示随机数

只读变量
用于变量值不允许被修改的情况

位置变量
为了使用Shell脚本程序时,方便通过命令行为程序提供参数,bash引入了位置变量的概念.
- 表示为$n,n为1-9之间的数字
当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量.


案列2

预定义变量
预定义变量是由Bash程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创建新的预定义变量,也不能直接为预定义变量赋值.预定义变量使用*$"符号和另一个符号组合表示
$#:命令行中位置变量的个数
$*:所有位置变量的内容
$?:上一条命令执行后返回的状态,当返回值为0时表示执行正常,非0值表示执行异常或出错
$0:当前执行的进程/程序名
[email protected]:表示列出所有位置参数,但是是以单个的形式列出
$$:表示返回当前进程的进程号
$!:返回最后一个后台进程的进程号

$*的使用方法

边栏推荐
- c语言之 练习题1 大贤者福尔:魔法数,神奇的等式
- UPDATE:修改数据语法使用例——《mysql 从入门到内卷再到入土》
- Application of Spatial 3D Model Reconstruction Based on Pix4Dmapper - Spatial Analysis and Site Selection
- DELETE:删除操作语法&使用例——《mysql 从入门到内卷再到入土》
- MATLAB神经网络拟合工具箱Neural Net Fitting使用方法
- MySQL高级指令
- [Golang]用反射让你的代码变优美
- camera预览流程 --- 从HAL到OEM
- Intelligent scheme design - intelligent rope skipping scheme
- wget编译升级故障解决
猜你喜欢

数字化转型:如何引导创新领导者

C # Hex file transfer skills necessary article 】 【 bin file code implementation

Shell编程规范与变量
![[SQL brush questions] Day3----Special exercises for common functions that SQL must know](/img/b8/05589138441ada5d453297de7d181b.png)
[SQL brush questions] Day3----Special exercises for common functions that SQL must know

Rider调试ASP.NET Core时报thread not gc-safe的解决方法

力扣221题,最大正方形

【PCBA方案设计】蓝牙跳绳方案

camera预览流程 --- 从HAL到OEM

【nvm】【node多版本管理工具】使用说明和踩坑(exit status 1)

c语言之 练习题1 大贤者福尔:魔法数,神奇的等式
随机推荐
MATLAB神经网络拟合工具箱Neural Net Fitting使用方法
LeetCode每日一题(1573. Number of Ways to Split a String)
ES6中的for...in/of的使用
Alibaba and Ant Group launched OceanBase 4.0, a distributed database, with single-machine deployment performance exceeding MySQL
3D model reconstruction of UAV images based on motion structure restoration method based on Pix4Dmapper
【nvm】【node多版本管理工具】使用说明和踩坑(exit status 1)
卡片盒笔记法的操作步骤
【PCBA scheme design】Bluetooth skipping scheme
B. Same Parity Summands
Object.assign用法 以及 与$.extend的区别
FPGA - 7系列 FPGA内部结构之Memory Resources -03- 内置纠错功能
ENVI自动生成地面控制点实现栅格影像的自动地理配准
HGAME 2022 Week2 writeup by pankas
第14届全国大学生信息安全竞赛-创新实践能力赛
MySQL高级指令
Using SylixOS virtual serial port, serial port free implementation system
国内Gravatar头像的完美替代方案Cravatar
用示波器揭示以太网传输机制
These must-know JVM knowledge, I have sorted it out with a mind map
Likou 221 questions, the largest square