shell脚本的编程规范与变量

目录

一、Shell脚本的概述

1.1Shell脚本的概念

1.2 Shell脚本应用场景

1.3 shell 的作用

1.4 用户登录的 shell

1.5 shell 脚本的作用

二、shell 的编程规范

2.1 shell 脚本的构成

2.2 shell 脚本执行方式

三、重定向与管道操作

3.1重定向

3.2 管道

四、shell 脚本变量

4.1 shell 变量的作用、类型

4.2 自定义变量

4.3 变量的作用范围

 4.4 数值变量的运算及特殊变量

4.5 环境变量

4.6 位置变量

4.7 预定义变量

五、总结 


一、Shell脚本的概述

1.1Shell脚本的概念

  1. 将要执行的命令按顺序保存到一个文本文件
  2. 给该文件可执行权限
  3. 可结合各种Shell控制语句以完成更复杂的操作

1.2 Shell脚本应用场景

  1. 重复性操作
  2. 交互性任务
  3. 批量事务处理
  4. 服务运行状态监控
  5. 定时任务执行

1.3 shell 的作用

作用:命令解释器,翻译官
介于系统内核与用户之间,负责解释命令行

Linux系统中的 shell 是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个"命令解释器"的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。

1.4 用户登录的 shell

常见的 shell 解释器程序有很多种,使用不同的 shell 时,其内部指令、命令行提示符等方面会存在一些区别。通过 /etc/shells 文件可以了解当前系统所支持的 shell 脚本种类

cat /etc/shells 
/bin/sh        //是bash命令的软链接(已经被/bin/bash所替代)
/bin/bash      //基准于GNU的框架下发展出的shell
/usr/bin/sh    //已经被bash所替换
/usr/bin/bash  //centos和redhat系统默认使用bash shell
/bin/tcsh      //csh的增强版,与csh完全兼容 整合了csh,提供更多的功能
/bin/csh       //已经被/bin/bash所替换(整合c      shell,提供更多的功能)

注:nologin 奇怪的shell,这个shell可以让用户无法登录主机

为什么系统上合法的Shel1要写入 /etc/shells 这个文件
因为系统某些服务运行过程中,会去检查用户能够使用的 shells,而这些 shell 的查询就是借由 /etc/shells 这个文件

用户什么时候可以取得shell来工作?用户默认会取得哪一个shell?
当用户登录的时候,系统就会给用户一个 shell 让用户来用,而这个登录取得的 shell 就记录在 /etc/passwd 这个文件内

不同的 shell 具备不同的功能, shell 还决定了Linux中默认的 shell 是 /bin/bash ,流行的shell有ash、bash、 ksh、csh、zsh等,不同的shell都有自己的特点以及用途

目前大多数linux系统默认使用的是bash

shell,默认登陆 shell 是 /bin/bash,可以查看 /etc/passwd 文件里注明这个 shell 是针对用户而言的,可以查看 /etc/passwd 里面的最后的字段使用的是哪个 shell,如果想要修改可以用 chmod -s 或者 chsh -s 来重新指定

1.5 shell 脚本的作用

自动化完成软件的安装部署,如安装部署LAMP架构服务

自动化完成系统的管理,如批量添加用户

自动化完成备份,如数据库定时备份

自动化的分析处理,如网站访问量

二、shell 的编程规范

2.1 shell 脚本的构成

第一行为 "#!/bin/bash” ,脚本申明(默认解释器):
表示此行以下的代码语句是通过 /bin/bash 程序来执行。
还有其他类型的解释器,比如#!/usr/ bin/python、#!/usr/bin/expect
注释信息:以"#“开头的语句表示为注释信息,被注释的语句在脚本运行时不会被执行可执行语句:如echo命令,用于输出"“之间的字符串

 

实例:运行上图的脚本

创建 shell 程序的步骤
第一步: 创建一个包含命令和控制结构的文件。

第二步: 修改这个文件的权限使它可以执行#使用chmod +x test.sh(不修改权限也可以)

第三步: 检测语法错误

第四步: 执行 ./first.sh (不修改权限可以使用 bash first.sh 或 sh first.sh)

2.2 shell 脚本执行方式

shell 脚本的执行通常有以下几种方式:

方法一:当前路径(决定路径与相对路径)下执行脚本(要有执行权限)
/home/first.sh 或者 ./first.sh

方法二:sh、bash脚本文件路径(这种方式可以不对脚本文件添加执行权限)
bash first.sh  或  sh first.sh

方法三: source 脚本文件路径(可以没有执行权限)
source first.sh

方法四:其他方法
sh < first.sh  或者  cat first.sh |sh (bash)

 

 

三、重定向与管道操作

由于 shell 脚本 “批量处理” 的特殊性,其大部分操作过程位于后台,不需要用户进行干预,因此要学会提取、过滤执行信息变得十分重要,所以我们需要重定向和管道

3.1重定向

重定向:
用户通过操作系统处理信息的过程中,包括以下几类交互设备文件
交互式硬件设备

类型设备文件文件描述编号默认设备
标准输入/dev/stdin0键盘
标准输出/dev/stdout1显示器
标准错误输出/dev/stderr2显示器

 重定向输出:
重定向输出指的是将命令的正常输出结果保存到指定的文件中,而不是直接显示在显示器的屏幕上

类型操作符用途
重定向输入<从指定文件读取数据
重定向输出>将标准输出结果保存到指定的文件,并且覆盖原有文件
>>将标准输出追加到指定的文件的尾部,不覆盖原有内容
标准错误输2>将错误信息保存到指定文件,并且覆盖原有文件
2>>将错误信息追加到指定文件的尾部,不覆盖原有内容
混合输出&>将标准输出,标准错误保存到同—文件中

 

 实例:

将666666输入到 log.txt 文件中
[root@localhost ~]# echo "666666" > log.txt
[root@localhost ~]# cat log.txt 
123123123

将888888写入到 log.txt 文件中,会覆盖原来的数据
[root@localhost ~]# echo "888888" > log.txt 
[root@localhost ~]# cat log.txt 
123412341234

将999999写入到 log.txt 文件中,使用 >> ,会追加数据
[root@localhost ~]# echo "999999" >> log.txt 
[root@localhost ~]# cat log.txt 
888888
999999

3.2 管道

管道操作符号 "|"
管道操作为不同命令之间的协同工作提供了一种机制,位于管道符号"|"左侧的命令输出的结果,
将作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道。

在 shell脚本应用中,管道操作通常用来过滤所需要的关键信息

@localhost ~]# tail -10 /etc/passwd | grep bash
ys:x:1000:1000:ys:/home/ys:/bin/bash
yuyue:x:1001:1001::/home/yuyue:/bin/bash
ppp:x:1002:1002::/home/ppp:/bin/bash
lisi:x:1003:1003::/home/lisi:/bin/bash

[root@localhost ~]# grep "/bin/bash$" /etc/passwd | awk -F: '{print $1,$7}'
root /bin/bash
ys /bin/bash
yuyue /bin/bash
ppp /bin/bash
lisi /bin/bash


 

四、shell 脚本变量

4.1 shell 变量的作用、类型

变量的作用
用来存放系统和用户需要使用的特定参数(值)
变量名:使用固定的名称,由系统预设或用户自定义
变量值:能够根据用户设置、系统环境的变化而变化

变量的类型
自定义变量:由用户自己定义、修改和使用
特殊变量:环境变量、只读变量、位置变量、预定义变量

4.2 自定义变量

变量的定义
Bash中的变量操作相对比较简单,不像其他高级编程语言(如c/C++、Java等)那么复杂。
在定义一个新的变量时,一般不需要提前进行声明,而是直接指定变量名称并赋给初始值(内容)即可

定义新的变量:

格式:变量名=变量值

变量名:临时存放数据的地方
变量值:临时的可变化的数据

查看定义的变量的值:

格式echo $变量名

echo选项
echo -n表示不换行输出
使用echo -e输出转义字符,将转义后的内容输出到屏幕上

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

取消定义
unset 变量名

特殊操作 :一些特殊的赋值操作,可以更灵活地为变量赋值,以便适用于各种复杂的管理任务

双引号(")
双引号主要起界定字符串的作用,特别是当要赋值的内容中包含空格时,必须以双引号括起来:其他情况下双引号通常可以省略

当内容中有空格

当以变量的值进行赋值

 

单引号( ')
当要赋值的内容中包含 $ 、 " 、 \ 等具有特殊含义的字符时,应使用单引号括起来。
在单引号的范围内,将无法引用其他变量的值,任何字符均作为普通字符看待。输入什么就显示什么但赋值内容中包含单引号(’)时,需使用’符号进行转义,以免冲突。 

 

反撇号( `)
反撇号主要用于命令替换,允许将执行某个命令的屏幕输出结果赋值给变量。
反撇号括起来的范围内必须是能够执行的命令行,否则将会出错

 使用反撇号难以在一行命令中实现嵌套命令替换操作,这时可以改用“$()"来代替反撤号操作,以解决嵌套的问题

 read 命令
除了上述赋值操作以外,还可以使用 Bash 的内置命令read来给变量赋值。
用来提示用户输入信息,从而实现简单的交互过程。执行时将从标准输入设备(键盘)读入一行内容,并以空格为分隔符,将读入的各字段依次赋值给指定的变量(多余的内容赋值给最后一个变量)。
若指定的变量只有一个,则将整行内容赋值给此变量。

一般来说为了使交互式操作的界面更加友好,提高易用性,read 命令可以结合 “-p” 选项来设置提示信息,以便告知用户应该输入什么内容等相关事项

 

交互式定义变量 (read)
-p: 提示用户的信息
-n: 定义字符数
-s: 不显示用户输入的内容,常用于输入密码 read -s -p “input your password:” pass
-t: 定义超时时间,超过多长时间没输自动退出

从文件读取内容赋值给变量

 

4.3 变量的作用范围

默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量,当进入子程序或新的子shell环境时,局部变量将无法再使用

export命令
为了使用户定义的变量在所有的子shell环境中能够继续使用,减少重复设置工作,可以通过内部命令 export 将指定的变量导出为全局变量。用户可以同时指定多个变量名称作为参数(无须使用"s"符号),变量名之间以空格分隔

 4.4 数值变量的运算及特殊变量

整数值的运算主要通过内部命令 expr 进行,运算符与变量之间必须有至少一个空格。
运算内容: 加(+) 、 减(-) 、 乘(*) 、 除(/) 、 取余(%)
运算符号: s(())和 $[ ]
运算命令: expr 和 let
运算工具: bc (系统自带)

expr命令(不仅可以运算,还支持输出到屏幕)
常用的几种运算符如下所述。
+:加法运算。
-:减法运算。
*:乘法运算,注意不能仅使用"*"符号,否则将被当成文件通配符。
/:除法运算。
%:求模运算,又称为取余运算,用来计算数值相除后的余数。

$[]和$(())必须要和echo在一起用因为他只能运算无法输出结果

$[]整数运算

使用bc进行运算,支持小数运算,但在脚本中不可直接使用否则会进入交互界面,可以用echo结合管道使用

 

bc做变量的运算:

 

 bc还可以做逻辑运算,真为1,假为0

4.5 环境变量

环境变量指的是出于运行需要而由 Linux 系统提前创建的一类变量,主要用于设置用户的工作环境,包括用户宿主日录、命令查找路径、用户当前目录、登录终端等。

环境变量的值由Linux系统自动维护,会随着用户状态的改变而改变。
使用 env 命令可以查看到当前工作环境下的环境变量,对于常见的一些环境变量应了解其各自的用途。

例如,变量 USER 表示用户名称,HOME 表示用户的宿主目录,LANG表示语言和字符集,PWD 表示当前所在的工作日录,PATH 表示命令搜索路径等、RANDOM 表示随机数,会返回 0-32767 的整数,USER 表示当前账户的账户名称等,一般都用全大写定义,注意和自定义变量区分
 

  PATH
PATH变量用于设置可执行程序的默认搜索路径,当仅指定文件名称来执行命令程序时,Linux系统将在 PATH变量指定的目录范围查找对应的可执行文件,如果找不到则会提示"command not found”。

 

[root@localhost opt]# vim qqq.sh
ls

[root@localhost opt]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin


[root@localhost opt]# chmod +x qqq.sh

[root@localhost opt]# PATH="$PATH:/opt/"

[root@localhost opt]# qqq.sh 
httpd-2.4.25  qqq.sh  rh
[root@localhost opt]# 

 

4.6 位置变量

当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。

位置变量也称为位置参数,使用$1、$2、$3、…、$9表示

命令或脚本本身的名称使用"$0"表示

 

4.7 预定义变量

预定义变量是由Bash程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创建新的预定义变量,也不能直接为预定义变量赋值。预定义变量使用"$"符号和另一个符号组合表示

$#: 表示命令行中位置参数的个数。
$*: 表示所有位置参数的内容,这些内容当做一个整体
$@: 表示列出所有位置参数,但是是以单个的形式的列出
$?: 表示前一条命令执行后的返回状态,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。
$0: 表示当前执行的脚本或程序的名称
$$: 表示返回当前进程的进程号
$!: 返回最后一个后台进程的进程号

 

 

五、总结 

 1.shell脚本的应用

2.shell脚本的编写格式与执行方法

3.重定向与管道的作用和应用

4.自定义变量赋值时单引号、双引号、反撇号的应用

5.数值变量的常用运算符:+、-、*、/、%(取余)

6.环境变量、只读变量、位置变量、预定义变量的应用


 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值