Shell编程规范与变量

目录

何为Shell

Shell脚本

在工作环境中Shell脚本具体都能干些啥

Shell脚本的构成与编辑规范

编写脚本代码

脚本的构成

执行脚本的方式

重定向与管道操作

交互式硬件设备

重定向操作

错误重定向

管道操作

Shell变量的作用、类型

引用变量

赋值时使用引号

交互式定义变量(read)

 设置变量的作用范围(export)

数值变量的运算

expr命令

let命令

bc命令

特殊的Shell变量

一键安装yum源仓库

求圆的面积


何为Shell

Shell是在Linux系统中运行的一种特殊程序

众所周知,我们说的话计算机是听不懂的

所以Linux“聘请”了Shell来在用户和内核之间之间充当“翻译官”

当我们登陆Linux系统时,就自动加载一个Shell程序

Bash是Linux系统中默认使用的Shell程序,bash是一个文件,linux系统中万物皆文件
bash文件位于/bin/bash,是目前大多数Linux版本采用的默认shell

Shell翻译官的日常打工流程:

计算机先接收用户所输入的的命令

然后全部交给Shell,让它把这些命令全部翻译成计算机所能识别的二进制语言

最后再将这些二进制语言传递给系统内核执行(调用计算机硬件资源)

用户登录后默认使用的Shell程序,一般为/bin/bash,当然翻译官不止Shell一位,不同Shell的内部指令、运行环境等都会有所区别

(注意,nologin是奇怪的shell,这个shell可以让用户无法登录主机。)

Shell脚本

shell脚本是啥
shell脚本就是说我们把原来需要一句一句敲的linux 命令或语句放在一个文件中,然后通过执行这个程序文件,使得计算机能瞬间完成我们需要完成的操作,也可以这样理解:

【在有些游戏中如果要完成某些连招,需要按照顺序释放不同的技能,但是有些连招实在太难或者太菜手残按不出来,这种时候他们可以设置一个类似shell脚本一样的东西,将需要按下的技能顺序写进一个程序,然后在需要的时候,只需要按一个键即可释放一整套连招,俗称宏,但是有些游戏内宏算是一种作弊,不建议使用宏,真正要变强还是得自己加以练习】

我们可以在脚本中输入一系统的命令以及相关的语法语句组合,比如变量,流程控制语句等,把他们凑合在一块儿就形成了一个功能强大的shell脚本

总结:将需要执行的命令保存到一个文件中,按照顺序执行,它不需要编译,它是解释型的

在工作环境中Shell脚本具体都能干些啥

  • 自动化完成软件的安装部署,如安装部署LAMP架构服务
  • 自动化完成系统的管理,如批量添加用户
  • 自动化完成备份,如数据库定时备份
  • 自动化的分析处理,如网站访问量
  • 重复性操作的工作
  • 交互性任务
  • 批量的事务处理
  • 服务运行状态监控
  • 定时任务的执行

Shell脚本的构成与编辑规范

编写脚本代码

  • 使用vim文本编辑器
  • 每行一条Linux命令,按执行顺序依次编写
  • vim 【文件名】.sh
  • 赋予可执行的权限
  • chmod+x  test.sh

脚本的构成

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

执行脚本的方式

./text.sh #相对路径

/root/text.sh #绝对路径

这两种方法都必须要有x执行权限

sh 脚本文件路径是不需要x执行权限的

source脚本文件路径

source命令也称为“点命令”,也就是一个点符号(.),是bash的内部命令,例如 . test.sh(.的前后都要空格)

不需要x权限,也需要使用相对路径或绝对路径

其他方法:(均不需要x执行权限) 

sh < test.sh  

cat test.sh | sh

bash test.sh

重定向与管道操作

交互式硬件设备

标准输入:从该设备接收用户输入的数据,设备文件为/dev/stdin,文件描述编号为0,默认设备为键盘

标准输出:通过该设备向用户输出数据,设备文件为/dev/stdout,文件描述编号为1,默认设备为显示器

标准错误:通过该设备报告执行出错信息,设备文件为/dev/stderr,文件描述编号为2,默认设备为显示器

类型操作符用途
重定向输入<从指定的文件中读取数据,而不是纯靠手打
重定向输出>将输出的结果保存到指定的文件中(注意:会覆盖原来的内容
>>将输出的结果追加到指定文件的尾部
标准错误输出2>将错误信息保存到指定的文件(也会覆盖原来的内容,这个就更需要注意力
2>>将错误的信息追加到指定的文件
混合输出&>将标准输出,标准错误的内容保存到同一个文件中

重定向操作

往里添加内容(注意,这里如果用>的话,就会把文件原来的内容给覆盖掉)

错误重定向

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

作用:

在实际应用中,错误重定向可用来收集程序执行的错误信息,为排错提供依据

还可以将无关紧要的错误信息重定向到空文件/dev/null 中,以保持脚本输出的简洁

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

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

/dev/null:把它看作"黑洞",所有写入它的内容都会永远丢失,从它那儿读取内容则什么也读不到,然而 /dev/null 对命令行和脚本都非常的有用
 

&>和>&符号

&表示等同于的意思

1、将错误显示的内容和正确显示的内容分开
2、把正确的和错误的信息都保存到一个文件(混合模式)

3、另一种方法,把正确的和错误的信息都保存到一个文件(混合模式)

管道操作

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

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

$bash表示系统提示符,表示系统提示符,表示系统提示符,表示此用户为普通用户,超级用户的提示符是#

bash是shell的一种,是linux下最常用的一种shell

$bash的意思是执行一个子shell,此子shell为bash

Shell变量的作用、类型

变量的作用

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

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

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

变量的类型

自定义变量:由用户自己定义、修改和使用

特殊变量:环境变量、只读变量、位置变量、预定义变量

自定义变量

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

echo $变量名      #查看变量的值

等号(=)用来给变量赋值

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

引用变量

echo选项

echo-n表示不换行输出

使用echo -e输出转义字符,将转义后的内容输出到屏幕上

常用的转义字符如下:

\c不换行输出,在"\c"后面不存在字符的情况下,作用相当于echo-n

\n 换行

\t 转义后表示插入tab,即制表符

注:\转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\s将输出“$”符号,而不当做是变量引用

赋值时使用引号

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

双引号允许通过$符号引用其他变量值

单引号禁止引用其他变量值, $视为普通字符

交互式定义变量(read)

read命令获取输入内容

-p:提示用户的信息

-n:定义字符数 

-s:不显示用户输入的内容,常用于输入密码read -s -p "input your password:" pass 

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

stty -echo  //关闭屏幕回显

stty echo   //开启屏幕回显

例如:read -p 提示信息 变量名
           echo $变量名


 

 设置变量的作用范围(export)

格式1:export 变量名

格式2:export 变量名=变量值

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

例如:直接执行Bash进入下一个新的子Shell脚本后,将无法引用父级Shell环境中定义的变量


 

 可以通过内部命令Export将指定的变量到处为全局变量。可以同时指定多个变量名称作为参数(不需要使用$符号),变量名之间以空格分隔。

使用export导出全局变量的同时,也可以为变量进行赋值,这样在新定义全局变量时就不需要提前进行赋值。
例如:执行以下操作可以直接新建一个名为lc的全局变量

数值变量的运算

Shell变量的数值运算多用于脚本程序的过程控制。在Bash Shell环境中,只能进行简单的整数运算,不支持小数运算。整数值的运算主要通过内部命令expr进行,基本格式如下所示。需要注意的是,运算符与变量之间必须有至少一个空格。

运算内容:加(+)、减(-)、乘(*)、除(/)、取余(%)

运算符号:( ( ) ) 和 (( ))和(())和[]

运算命令: expr和let

运算工具: bc(计算器)

expr命令

expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。

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


变量运算

let命令

let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来。

let i++        #i自加1

let i--        #i自减1

[i++]      #先输出后执行

[++i]      #先执行后输出

 

bc命令

bc 命令是任意精度计算器语言,通常在linux下当计算器用(可以调用小数)

用echo结合管道使用命令

scale=2设小数位,2代表保留2位

特殊的Shell变量

环境变量

  • 由系统提前创建,用来设置用户的工作环境
  • 配置文件:/etc/profile(全局配置文件) 、~/.bash_profile(用户的独立配置文件)

常用的环境变量

位置变量

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

$n:n为数字,$0代表命令本身,1~9代表第一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为 ${10}

 

 预定义变量

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

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

一键安装yum源仓库

求圆的面积

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值