Shell编程规范与变量揭秘
程序员文章站
2022-05-15 09:15:57
...
文章目录
一、Shell脚本的概述
Shell脚本的概念
将要执行的命令按顺序保存到一个文本文件
- 给该文件可执行权限,便可运行
- 可结合各种Shell控制语句以完成更复杂的操作
Shell脚本应用场景
- 重复性操作
- 批量事务处理
- 自动化运维
- 服务运行状态监控
- 定时任务执行
- …………
二、Shell的作用
Shell的作用——命令解释器,“翻译官”
- 介于系统内核与用户之间,负责解释命令行
用户的登陆Shell
- 登陆后默认使用的Shell程序,一般为/bin/bash
- 不同Shell的内部命令、运行环境等会有所区别
三、编写第一个Shell脚本
编写脚本代码
- 使用vim文本编辑器
- 每行一条linux命令,按执行顺序依次编写
;号表示一句话的结束
同时执行两个不相关的命令,如:
[aaa@qq.com ~]#date;who
2019年 11月 25日 星期一 17:16:38 CST
root :0 2019-11-25 17:09 (:0)
root pts/0 2019-11-25 17:10 (:0)
创建脚本执行:
[aaa@qq.com ~]# vim demo.sh
#!/bin/bash //脚本声明
#demo.sh
cd /boot
pwd
ls -lh vm*
[aaa@qq.com ~]# chmod +x demo.sh //添加执行权限
[aaa@qq.com ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg 公共 视频 文档 音乐
demo.sh original-ks.cfg 模板 图片 下载 桌面
[aaa@qq.com ~]# ./demo.sh //执行脚本
/boot
-rwxr-xr-x. 1 root root 5.7M 11月 22 02:35 vmlinuz-0-rescue-2dce0ebabd4a407ab61cc0795f02925b
-rwxr-xr-x. 1 root root 5.7M 8月 23 2017 vmlinuz-3.10.0-693.el7.x86_64
执行脚本文件
- 方法一:脚本文件路径(绝对路径与相对路径) 必须有x权限 //cd命令不会切换路径
[aaa@qq.com ~]# chmod +x demo.sh //添加执行权限
[aaa@qq.com ~]# ./demo.sh //执行脚本文件
/boot
-rwxr-xr-x. 1 root root 5.7M 11月 22 02:35 vmlinuz-0-rescue-2dce0ebabd4a407ab61cc0795f02925b
-rwxr-xr-x. 1 root root 5.7M 8月 23 2017 vmlinuz-3.10.0-693.el7.x86_64
[aaa@qq.com ~]# //仍在家目录中,cd命令不会切换路径
- 方法二:sh脚本文件路径 // cd命令不会切换路径
[aaa@qq.com ~]# sh demo.sh
/boot
-rwxr-xr-x. 1 root root 5.7M 11月 22 02:35 vmlinuz-0-rescue-2dce0ebabd4a407ab61cc0795f02925b
-rwxr-xr-x. 1 root root 5.7M 8月 23 2017 vmlinuz-3.10.0-693.el7.x86_64
[aaa@qq.com ~]# //仍在家目录中,cd命令不会切换路径
- 方法三:source脚本文件路径 //cd命令会区切换路径
[aaa@qq.com ~]# source demo.sh
/boot
-rwxr-xr-x. 1 root root 5.7M 11月 22 02:35 vmlinuz-0-rescue-2dce0ebabd4a407ab61cc0795f02925b
-rwxr-xr-x. 1 root root 5.7M 8月 23 2017 vmlinuz-3.10.0-693.el7.x86_64
[aaa@qq.com boot]# //执行脚本后cd命令会切换路径boot
更完善的脚本构成
- 脚本声明
- 注释信息
- 可执行语句
[aaa@qq.com ~]# vim demo.sh
#!/bin/bash
#demo.sh
#name:^^^^^
cd /boot
echo "当前所在位置:" //输出友好提示信息,如当前所在位置:
pwd
echo "以vm为开头的文件为:" //输出友好提示信息,如以vm为开头的文件为:
ls -lh vm*
[aaa@qq.com ~]# ./demo.sh //执行脚本
当前所在位置:
/boot
以vm为开头的文件为:
-rwxr-xr-x. 1 root root 5.7M 11月 22 02:35 vmlinuz-0-rescue-2dce0ebabd4a407ab61cc0795f02925b
-rwxr-xr-x. 1 root root 5.7M 8月 23 2017 vmlinuz-3.10.0-693.el7.x86_64
四、重定向与管道操作
交互式硬件设备
- 标准输入:从该设备接收用户输入的数据
- 标准输出:通过该设备向用户输出数据
- 标准错误输出:通过该设备报告执行出错信息
重定向操作
类型 | 操作符 | 用途 |
---|---|---|
重定向输入 | < | 从指定的文件读取数据,而不是从键盘输入 |
重定向输出 | > | 将输出结果保存到指定的文件(覆盖原有内容) |
>> | 将输出结果追加到指定的文件 | |
标准错误输出 | 2> | 将错误信息保存到指定的文件(覆盖原有内容) |
2>> | 将错误信息追加到指定的文件中 | |
混合输出 | &> | 将标准输出、标准错误的内容保存到同一个文件中 |
管道操作符号“|”
-
将左侧命令输出的结果,作为右侧命令的处理对象
cmd1 | cmd2 […|cmdn]
awk 按列读取数据
F 指定分割符,不加F 默认按空格或tab制表符进行分割
目前为以“:”分割,输出第1、7个字段
‘{print }’打印出第一部分和第七部分
[aaa@qq.com ~]# grep "bash$" /etc/passwd | awk -F: '{print $1,$7}'
root /bin/bash
ml /bin/bash
[aaa@qq.com ~]#
五、Shell变量的作用、类型
变量的作用
- 为灵活管理Linux系统提供特定参数,有两层意思
- 变量名:使用固定的名称,由系统预设或用户定义
- 变量值:能够根据用户设置、系统环境的变化而变化
变量的类型
- 自定义变量:由用户自己定义、修改和使用
- 环境变量:由系统维护,用于设置工作环境
- 位置变量:通过命令行给脚本程序传递参数
- 预定义变量:Bash中内置的一类变量,不能直接修改(*、$#)
六、Shell脚本变量揭秘
自定义变量
定义一个新的变量
变量名以字母或下划线开头,区分大小写,建议全大写
查看变量的值
[aaa@qq.com ~]# addr=192.168.17.1 //将192.168.17.1赋予addr
[aaa@qq.com ~]# echo $addr //查看变量addr的值
192.168.17.1
[aaa@qq.com ~]#
赋值时使用引号
-
双引号:允许通过$符号引用其他变量值
-
单引号:禁止引用其他变量值,$视为普通字符
-
反撇号:命令替换,提取命令执行后的输出结果
· ·反撇号里面输的是命令,()小括号里面输的也是命令
从键盘输入内容为变量赋值
read [-p “提示信息”] 变量名
设置变量的作用范围
格式1:export 变量名…
格式2:export 变量名=变量值
- —两种格式可以混合使用
整数变量的运算
expr 变量1 运算符 变量2 [运算符 变量3] …
常用运算符
- 加法运算:+
- 减法运算:-
- 乘法运算:*
- 除法运算:/
- 求模(取余)运算:%
环境变量
- 由系统提前创建,用来设置用户的工作环境
- 配置文件:/etc/profile(针对系统全局)、~/.bash_profile(针对当前用户)
常见的环境变量
- PWD、PATH
- USER、SHELL、HOME
位置变量
- 表示为$n,n为1~9之间的数字
示例:
[aaa@qq.com ~]# vim nu.sh
#!/bin/bash
sum=0
sum=`expr $1 + $2`
echo "总和为:$sum"
[aaa@qq.com ~]# ./nu.sh 24 13
总和为:37
预定义变量
- $# :命令行中位置变量的个数
- $* :所有位置变量的内容
- $? :上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错
- $0 :当前执行的脚本或程序名称
示例:
[aaa@qq.com ~]# vim nu.sh
#!/bin/bash
sum=0
sum=`expr $1 + $2`
echo "是否执行成功:$?"
echo "总和为:$sum"
echo "执行的脚本名称为:$0"
echo "参数个数为:$#"
echo "详细内容为:$*"
[aaa@qq.com ~]# ./nu.sh 24 13
是否执行成功:0
总和为:37
执行的脚本名称为:./nu.sh
参数个数为:2
详细内容为:24 13
[aaa@qq.com ~]#
内容总结:
1、Shell脚本的内容构成:环境声明、注释文字、执行语句
2、重定向包括重定向输入、重定向输出、错误重定向
3、定义或赋值变量时,采用“变量名=变量值”的格式。赋值操作还可以使用单引号、双引号、反撇号、read命令等方式
4、查看或引用变量的值时,采用"$变量名"的格式
5、环境变量、位置变量、预定义变量的作用与用途
上一篇: ACCESS——偏移注入
下一篇: bluecms灰盒测试