Shell编程规范与变量
一.Shell脚本概述
1.shell的作用
Linux系统中的shell是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“”命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果
常见的shell解释器有多种 ,不同的解释器,其内部指令,命令行提示符等方面会存在一些区别,下面命令可以了解当前系统支持的shell脚本种类。
2.shell脚本的格式与使用
首先随便创建一个文件,然后vim编辑器进行编辑,将要执行的命令按顺序写入其中,最好是在一条命令上方加“echo "解释下方内容的字段"”,使用bash 脚本名 执行脚本
[root@localhost ~]# vim frist.sh
echo "进入boot目录"
cd /boot/
echo "查看当前所在的位置"
pwd
echo "其中以vml开头的文件包括"
ls -lh vml*
[root@localhost ~]# bash frist.sh
进入boot目录
查看当前所在的位置
/boot
其中以vml开头的文件包括
-rwxr-xr-x. 1 root root 6.5M 4月 21 01:15 vmlinuz-0-rescue-835eee3378df4310a7c5ee65d4766a3f
-rwxr-xr-x. 1 root root 6.5M 10月 20 2020 vmlinuz-3.10.0-1160.el7.x86_64
除了上诉使用bash执行脚本外还可以使用“sh 脚本路径”通过解释器来解释脚本,“. 脚本路径”或“source 脚本路径”加载脚本,以及 使用“./脚本路径”执行脚本,使用此方法文件本身要具有x(执行)权限
3.重定向
用户通过操作系统处理信息的过程中,包括3类交互设备文件:
- 标准输入(STDIN):默认的设备是键盘,文件编号为0,命令将从标注输入文件中读取在执行过程中需要的输入数据
- 标准输出(STDOUT):默认的设备是显示器,文件编号1,命令将执行后的输出结果发送到标准输出文件
- 标准错误(STDERR):默认的设备是显示器,文件编号为2,命令将执行期间的各种错误信息发送到标准错误文件。
(1)重定向输出
[root@localhost ~]# uname -p > kernel.txt
[root@localhost ~]# cat kernel.txt
x86_64[root@localhost ~]# uname -r >> kernel.txt
[root@localhost ~]# cat kernel.txt
x86_64
3.10.0-514.el7.x86_64
(2)重定向输入
(3)重定向错误
操作命令 2> 文件位置 //覆盖
操作命令 2>> 文件位置 //追加
4.管道操作
管道(pipe)操作为不同命令之间的协同工作提供了一种机制,位于管道符号“|”左侧的命令输出的结果,将作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道。
[root@localhost ~]# grep "/bin/bash$" /etc/passwd //提取之前
root:x:0:0:root:/root:/bin/bash
bdqn:x:1000:1000:bdqn:/home/bdqn:/bin/bash
tsengyia:x:1002:1002::/home/tsengyia:/bin/bash
jerry:x:1003:1003::/home/jerry:/bin/bash
lisi:x:1004:1004::/home/lisi:/bin/bash[root@localhost ~]# grep "/bin/bash$" /etc/passwd | awk -F: '{print $1,$7}' //提取之后
root /bin/bash
bdqn /bin/bash
tsengyia /bin/bash
jerry /bin/bash
lisi /bin/bash
上例中啊awk命令的作用是以冒号“:”进行分割,输出第一个,第七个区域的字符串。其中的“-F”部分用来指定分割符号(未指定时,默认以空格或制表符分隔)
二.Shell变量的作用,类型
1.作用
Shell变量用来存放系统和用户需要使用额特定参数,而且这些参数可以根据用户用户的设定或环境的变化而变化,通过使用Shell变量,Shell程序能够提供更加灵活的功能,实用性更强。
2.类型
(1)自定义变量
[root@localhost ~]# read -p "请指定备份存放目录:" ToDir2
请指定备份存放目录:/opt/backup
[root@localhost ~]# echo $ToDir2
/opt/backup
6.设置变量的作用范围
- +:加法运算。
- -:减法运算。
- \*:乘法运算,注意不能仅使用“*”符号,否则将被当成文件通配符。
- /:除法运算。
- %:求模运算,又称为取余运算,用来计算数值相除后的余数
(2)环境变量
[root@localhost ~]# ls -lh /root/first.sh //确认脚本位置
-rwxr-xr-x. 1 root root 27 Jul 4 09:24 /root/first.sh[root@localhost ~]# echo $PATH //查看当前搜索路径
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin:/root/bin
[root@localhost ~]# first.sh //直接执行时找不到命令
-bash: first.sh: command not found
[root@localhost ~]# PATH="$PATH:/root" //将/root 添加到搜索路径
[root@localhost ~]# echo $PATH //查看修改后的搜索路径
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin:/root/bin:/root
[root@localhost ~]# first.sh //直接以文件名运行脚本
当前的目录位于:
/boot
其中以 vml 开头的文件包括:
-rwxr-xr-x. 1 root root 5.2M Apr 12 13:20
vmlinuz-0-rescue-b15df1eb8205483f9f70c79709810abc
-rwxr-xr-x. 1 root root 5.2M Nov 22 2016 vmlinuz-3.10.0-514.el7.x86_64
[root@localhost ~]# vim /root/.bash_profile
…… //省略部分内容
export HISTSIZE=200
上述修改只有当 root 用户下次登录时才会生效。若希望立即生效,应手动修改环境变量,或者可以加载配置文件执行。
[root@localhost ~]# history | wc -l
356 //已经记录的历史命令条数
[root@localhost ~]# source /root/.bash_profile //读取并执行文件中的设置
[root@localhost ~]# history | wc -l
200 //修改后的历史命令条数
(3)只读变量
[root@localhost ~]# name=cloud
[root@localhost ~]# readonly name //设置为只读变量
[root@localhost ~]# echo $name
cloud
[root@localhost ~]# name=yun
-bash: name: readonly variable //只读变量不可以被重新赋值
[root@localhost~]#
[root@localhost ~]# unset name //只读变量不可以被删除
-bash: unset: name: cannot unset: readonly variable
(4)位置变量
[root@localhost ~]# vim adder2num.sh
#!/bin/bash
SUM=`expr $1 + $2` echo "$1 + $2 = $SUM"
[root@localhost ~]# chmod +x adder2num.sh
[root@localhost ~]# ./adder2num.sh 12 34 //$1 为 12、$2 为 34 的情况
12 + 34 = 46
(5)预定义变量
- $#:表示命令行中位置参数的个数
- $*:表示所有位置参数的内容
- $?:表示前一条命令执行后返回的状态,返回值为0表示执行正确,返回值非0的值表示执行异常。
- $0:表示当前执行的脚本或程序的名称