当前位置:网站首页>Shell编程规范与变量
Shell编程规范与变量
2022-07-27 21:11:00 【吉吉吉吉吉吉吉吉吉吉】
目录
2、方法二:指定shell来解释脚本,不要求文件必须有x权限
一、Shell脚本概述
1、Shell脚本的概念
将要执行的命令按顺序保存到一个文本文件
给该文件可执行权限
可结合各种shell控制语句以完成更复杂的操作
2、Shell脚本应用场景(基础)
重复性操作
交互性任务
批量事务处理
服务运行状态监控
定时任务执行
。。。。。。
3、Shell的作用
命令翻译器,“翻译官”
介于系统内核与用户之间,负责解释命令行

二、用户的登录Shell
默认登录后shell程序为/bin/bash
不同shell的内部命令,运行环境等会有所不同

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

2、方法二:指定shell来解释脚本,不要求文件必须有x权限
sh 脚本路径:sh liji.sh
source 脚本路径:.liji.sh 或 soure liji.sh: 或 bash liji.sh

五、管道符操作
将管道符号"|"左侧的命令输出的结果,作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道。
在shell脚本中,管道操作通常用来过滤所需要的关间信息。

结合awk打印使用空格进行分割,截取出正在运行的套接口的状态

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

例子②

例子③:标准错误输出

七、变量的分类
1、变量的分类
用来存放系统和用户需要使用的特定参数
环境变量:有系统维护,应用设置工作环境
位置变量:通过命令行给脚本程序传递参数
自定义变量:由用户自己定义,修改和使用
预定义变量:bash中内置的一类变量,不能直接修改
2、定义一个新的变量
格式:变量名=变量值
变量命名规则:以字母或下划线开头,区分大小写

3、自定义变量
Bash中的变量操作相对比较简单,不像其他高级编程语言((如c/C++、Java等)那么复杂。在定义一个新的变量时,一般不需要
提前进行声明,而是直接指定变量名称并赋给初始值(内容)即可
格式:变量名=变量值
变量名:临时存放数据的地方
等号两边没有空格。变量名称需以字母或下划线开头,名称中不要包含特殊字符(如+、一、*、/、.、 ?、8、&、#等)
用echo查看和引用变量的值:
通过在变量名称前添加前导符号"$”,可以引用一个变量的值,使用echo命令可以查看变量,可以在一条echo 命令中同时查看多个变量值
当变量名称容易和紧跟其后的其他字符混淆时,需要添加“{}”括起来,否则将无法确定正确的变量名称,对于未定义的变量,将显示为空置。
4、赋值时使用引号
双引号:允许通过$符号引用其他变量值
单引号:禁止引用其他变量值,$视为普通字符
反撇号:命令替换,提取命令执行后的输出结果。`..` 和$(..)作用相同
八、read命令获取输入内容
目的:让用户自己,给变量赋值,灵活
语法 read [选项] 变量名
1、常用选项:
| 选项 | 释义 |
| -p | 定义提示用户的信息 |
| -n | 定义字符数(限制变量值的长度) |
| -s | 不显示(不显示用户输入的内容) |
| -t | 定义超时时间,默认单位为秒(限制用户输入变量值的超时时间) |
2、变量作用范围
默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量,当进入子程序或新的子shell环境时间,局部变量将无法再使用
可以通过内部命令export将指定的变量导出为全局变量,使用户自定义的变量在所以的子shell环境中可以继续使用。
格式1:export变量名
格式2:export 变量名=变量值
3、整数变量的运算
| 表达式 | 举例 |
| $(()) | echo $((9+9)) |
| $[] | echo $[15-9] |
expr | expr 10/5 |
| let | i=1;let i+=10 等于let i=i+10 |
i++相当于i=$[$i+1]
i--相当于i=$[$i-1]
i+=10相当于i=$[$i+10]
九、环境变量
使用env命令可以查看到当前工作环境的环境变量
变量user表示用户名称,home表示用户的加目录,lang表示语言和字符集,pwd表示当前所在的工作目录,变量path表示可执行程序的默认搜索路径。
十、只读变量
用于变量值不允许被修改的情况
边栏推荐
- Spark 离线开发框架设计与实现
- 76000 people shut down! Toshiba announced the closure of all factories in Japan
- 五子棋人机对战实现
- Latex常用总结(2):输入矩阵(输入矩阵、对角阵、方程组等)
- UE4 official AEC blueprint case course learning notes
- JUC toolkit learning
- Put cloudflare on the website (take Tencent cloud as an example)
- What are the methods of process synchronization?
- C # delegate usage -- console project, which implements events through delegation
- Redis distributed lock
猜你喜欢
随机推荐
Design and implementation of spark offline development framework
Construction and application of super large scale knowledge map of ants
File & recursion 14.1
Error:svn: E155010: ‘/Users/.../Desktop/wrokspace/xxx‘ is scheduled for addition, but is missing
Reduce error demonstration
15million per day! BYD masks won a US $1billion order in California
Redis 哈希Hash底层数据结构
BUU-CTF basic rsa
In 2019, the world's top ten semiconductor manufacturers: Intel returned to the first place, and apple rose sharply against the trend
Elk log analysis system installation and deployment
BUUCTF-RSA
【C语言】通讯录(动态版本)
【开发教程9】疯壳·开源蓝牙心率防水运动手环-心率监测
虚拟存储器与Cache的比较
Shuffle, partition and read of tfrecord
[MRCTF2020]babyRSA
Realize today's news website based on native JS
What is the difference between concurrency and parallelism?
Using the optical fingerprint scheme under the huiding screen, Samsung Galaxy a71 5g is listed
2022年土木,建筑与环境工程国际会议(ICCAEE 2022)
![[RoarCTF2019]RSA](/img/0e/8c8371ccf40094e5b03e502d6ae851.png)








