Shell 第一章脚本

Shell脚本


引言:在生产环境中,每个任务都是需要大量命令来完成,Shell脚本就是将各类脚本提前放置在这个文件例,按需要执行的优先排序,方便我们一次性执行多个命令的程序文件,

一、Shell脚本的概念

1.Shell是什么

(1)Linux系统中运行的一种特殊程序;(2)在用户和内核之间之间充当“翻译官”;(3)用户登陆Linux系统时,自动加载一个Shell程序;(4)Bash是Linux系统中默认使用的Shell程序

将要执行的命令按顺序保存到一个文本文件

给该文件可执行权限

可结合各种Shell控制语句以完成更复杂的操作

2.Shell的作用

命令解释器,“翻译官”;介于系统内核与用户之间,复制解释命令行

用户的登录Shell

  • 登录后默认使用的Shell程序,一般为/bin/bash
  • 不同Shell的内部指令、运行环境等会有所区别

在这里插入图片描述
在这里插入图片描述

3.Shell脚本应用场景

重复性操作:交互性任务;批量事务处理;服务运行状态监控;定时任务执行

4.Shell脚本的作用

自动化完成软件的安装部署,如安装部署LAM架构服务;自动化完成系统的管理,如批量添加用户

自动化完成备份,如数据库定时备份;自动化的分析处理,如网站访问量

二、Shell脚本的编辑及运行

1.编写一个Shell程序的基本步骤
①创建一个包含命令和控制结构的文件(定义,声明)		vim /dome.sh
②修改这个文件的权限使它可以执行		可使用chmod +x 脚本文件名
③检测语法错误	(命令集合是否正确	    set -x	追踪脚本是否有故障
④执行脚本						   ./dome.sh 

shell脚本文件结尾必须是sh
#!脚本声明(解释器)
#! /bin/bash	使用shell
#! /usr/bin/python	使用python语言编写

第一行为"#! /bin/bash" #脚本声明(默认解释器)

表示自此行一下的代码语句是通过/bin/bash 程序来执行

还有其他类型的解释器,比如#! /usr/bin/python ;#!/usr/bin/expect

注释信息:以"#"开头的语句表示为注释信息,被注释的语句在脚本运行时不会被执行

可执行语句:如echo命令,用于输出“”之间的字符串

在这里插入图片描述

2.执行脚本的方法

方法一:chmod赋予创建的脚本结构赋予权限

在这里插入图片描述

方法二:sh脚本文件路径(不需要x权限)

在这里插入图片描述

方法三:source或脚本文件路径(不需要x权限)

source命令也称为"点命令",也就是一个点符号(.),是bash的内部命令

在这里插入图片描述

其他方法

sh < dome.sh或cat dome.sh |sh或者(bash)

在这里插入图片描述

注:生产环境中一般使用前三个方法

3.Shell脚本的完善

为了方便使用,了解阅读信息,容易复盘。
在这里插入图片描述
在这里插入图片描述

二、重定向与管道操作

1.交互式硬件设备
  • 标准输入:从该设备接收用户输入的数据
  • 标准输出:通过该设备向用户输出数据
  • 标准错误:通过该设备报告执行出错信息
类型设备文件文件描述编号默认设备
标准输入/dev/stdin0键盘
标准输出/dev/stdout1显示器
标准错误输出/dev/stderr2显示器
2.重定向操作
类型操作符用途
重定向输出<从指定的文件读取数据,而不是从键盘输入
重定向输出>将输出结果保存到指定的(覆盖原有内容)
>>将输出结果追加到指定的文件尾部
标准错误输出2>将错误信息保存到指定的文件(覆盖原有内容)
2>>将错误信息追加到指定的文件中
混合输出&>将标准输出、标准错误的内容保存到同一个文件中

**例:**在使用passwd命令为用户设置密码时,每次都必须根据提示输入两次密码字串,非常繁琐,若改用重定向输入将可以省略交互式的过程,而自动完成密码设置(结合passwd命令的"–stdin"选项来识别标准输入)

在这里插入图片描述

追加内容到文件内:“>>”

在这里插入图片描述

**重定向输入:**重定向输出值得是将命令的正常输出结果保存到指定文件,而不是直接显示在显示器的屏幕上,重定向输出使用">“或”>>"操作符号,分别作用于覆盖或追加文件内容,若重定向输出的目标文件不存在,则会新建该文件,然后将前面命令的输出结果保存到该文件中,若目标文件已经存在,则将输出结果覆盖或追加到文件

cat << 0 以0作为分界符,只要不输入0,数据就可以一直输入,呈现在显示屏

在这里插入图片描述

把重定向和输出重定问结合使用,把从屏幕输出的内容保存到文件

在这里插入图片描述

错误重定向:

错误重定向指的是执行命令过程中的出现的错误信息(如选项或参数错误等)保存到指定的文件,而不是直接显示在屏幕上,错误重定向使用"2>"操作符

2个作用:在实际应用中,错误重定向可用来收集程序执行的错误信息,为排错提供依据,还可以将无关紧要的错误信息重定向到空文件/dev/null中,以保持脚本输出的简洁,使用"2>“操作符时,会像使用”>"操作符一样覆盖目标文件的内容,若要追加内容而不是覆盖文件,则应改用"2>>"操作符

使用"2>“操作符时,会像使用”>"操作符一样覆盖目标文件的内容,若要追加内容而不是覆盖文件,则应该改用"2>"操作符

当命令输出的结果可能既包括标准输出(正常执行)信息,又包括错误输出信息时,可以使用操作符">"、"2>“将两类输出信息分别保存到不同的文件,也可以使用”&>"操作符将两类输出信息保存到同一个文件

在这里插入图片描述

**/dev/null:**把它看作一个"黑洞",所有写入它的内容将永久丢失,而尝试从它那里获取内容也是什么都没有,然而/dev/null对命令行和脚本都非常有用

在这里插入图片描述

在我们编译源码包的自动化脚本中,如果要忽略make、make install等操作过程信息,则可以将其定向到空文件 /dev/null

自动化编译安装httpd服务器的脚本

#! /bin/bash		
cd /usr/srcc/httpd-2.4.5/
./configure --prefix=/usr/local/httpd --enable-so &> /dev/null
make &>1 /dev/null
make install &> /dev/null

#/dev/null等同于make install > /dev/null 2>&1

&>和>&符号

&表示等同于的意思

例:把正确和错误的消息输入到相同的位置

1 > &2 把标准输出重定向到标准错误

2 > &2 把标准错误重定向到标准输出

在这里插入图片描述

3.管道符号操作"|"

将左侧的命令输出结果,作为右侧命令的处理对象

查看 /etc/passwd 中”login"有哪些

在这里插入图片描述

打印用户中可以登录Shell的用户名,家目录、登录shell

cat /etc/passwd |grep "nologin" | awk -F: '{print $1,$6,$7}'
或
grep 'bologin$' /etc/passwd | awk -F: '{print $1,$6,$7}'

在这里插入图片描述

$bash

表 示 体 统 提 示 符 , 表示体统提示符, 表示此用户为普通用户,超级用户的提示符是#,bash是shell的一种,是linux下最常用的一种shell,#bash的意思是执行一个子shell。此子shell为bash

三、Shell标量的作用、类型

1.变量的作用

用来存放系统和用户需要使用的特定参数(值)

变量名:使用固定的名称,由系统预设或用户定义

变量值:能够根据用户设置、系统环境的变化而变化

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

四、自定义变量

变量名以字母或下划线开头,区分大小写,建议全大写

变量名=变量值

等号"="用来给变量赋值

等会"="运算符左边是一个变量名,右边是存储在变量中的值

在这里插入图片描述

1.引用变量

赋值时使用引号:

  • 双引号:允许通过$符号引用其他变量值
  • 单引号:禁止引用其他变量值,$视为普通字符
  • 反撇号:命令替换,提取命令执行后的输出结果

双引号

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

在这里插入图片描述

单引号

当要复制的内容中包含$、“、”、\等具有特殊含义的字符时,应使用单引号括起来;在单引号的范围内,将无法引用其他变量的值,任何字符均作为普通字符,输入什么就呈现在显示屏上,但赋值内容中包含单引号(‘)时,需使用 ”\“ 符号进行转义,以免冲突
在这里插入图片描述
在这里插入图片描述

反撇号

反撇号主要用于命令替换,允许将执行某个命令的屏幕输出结果赋值给变量,反撇号括起来的范围内必须时能够执行的命令行,否则将会出错,使用反撇号难以在一行命令中实现嵌套命令替换操作,这时可以改用”$()"来代替反撇号操作,以解决嵌套的问题

在这里插入图片描述

反撇号(`),直接调用命令结果,因为echo $A 666=boss 666,所以ABC=boss 666

在这里插入图片描述

先调用命令结果,再查看内容,命令正确,若无反撇号就失败

在这里插入图片描述

unset 取消变量名内容

在这里插入图片描述

2.从键盘输入内容为变量赋值

read [-p “提示信息”] 变量名

常用选项:

read -p :提示用户的信息

read -n:定义字符数

read -s:不显示用户输入的内容,常用于输入密码read -s -p “inut your passwd :” pass

read -t:定义超时时间,超过设定时间未输入内容自动退出从文件读取内容赋值给变量(默认10s)

在这里插入图片描述

脚本内编写,也同样适用

3.export全局变量

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

export 变量名
export 变量名=变量值
export 设置全局变量

在这里插入图片描述

4.整数变量的运算

expr 变量1 运算符 变量2 [运算符 变量3]……

常用选项:

  • 加法运算:+
  • 减法运算:-
  • 乘法运算:、*
  • 除法运算:/
  • 求模(取余)运算:%

"$[]"可以作为运算符

在这里插入图片描述

脚本编写,输入数字进行相应运算

在这里插入图片描述

执行脚本

在这里插入图片描述

5.let命令

let的运算可以改变变量本身的值,但不显示结果,需要echo,其他运算方式可以坐运算但不改变变量本身的值

let n++		n自加1,
let n--		n自减1

分号是分隔符,表示前面和后面两个命令的意思,执行完第一个,再执行后一个
在这里插入图片描述
在这里插入图片描述

echo $[n++] 先输出再加1

echo $[++n] 先加1,再输出

在这里插入图片描述

6.bc命令

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

交互界面

在这里插入图片描述

非交互界面

在这里插入图片描述

bc也可以坐变量间的运算及逻辑运算,真为1,假为0

五、特殊的Shell变量

1.环境变量

由系统提前创建,用来设置用户的工作环境

配置文件:/etc/profile、~/.bash_profile

2.常见的环境变量
  • PWD:表示当前所在的工作目录

  • PATH:表示可执行程序的默认搜索路径

  • USER:表示用户名称

  • HOME:表示用户的宿主目录

  • LANG:表示语言和字符集

  • RAMNDOM:表示随机数(随机生成)

在这里插入图片描述

3.只读变量

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

在这里插入图片描述

4.位置变量

位置变量:表示为"$n",n为19之间的数字,19代表第一个到第九个参数,十以上的参数需要使用大括号表示,比如选择第十个参数¥{10}

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

在这里插入图片描述

在这里插入图片描述

5.预定义变量

预定义变量:

  • $#:命令行中位置变量的个数
  • $*:所有位置变量的内容
  • $?:上一条命令执行后返回的状态,当返回状态值为0时,表示执行正常,非0值表示执行异常或出错
  • $0:当前执行的进程/程序名
  • $@:表示列出所有位置参数,但是是以单个的形式的列出
  • $!:返回最后一个后台的进程号

在这里插入图片描述

∗ 和 *和 @的区别:

∗ 、 *、 @:表示命令或脚本要处理的参数

$*:把所有参数看成以空格分隔的一个字符串整体

$@:把各个参数加上双引号分隔成n份的参数列表,每个参数作为一个字符串返回

在这里插入图片描述

在这里插入图片描述

总结

通过上述内容,可以了解到shell的作用以及什么场景使用shell,可以初步了解如何编写一个shell脚本,编写shell脚本的规范和执行方法;重定向输入输出内容的作用和使用方法,管道符号的使用方法,自定义变量赋值时多个符号的使用方法;数值运算的方法;环境变量、只读变量、位置变量、预定义变量的用途

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值