Shell编程规范与变量

目录

引言

一、Shell脚本概述

1、什么是Shell

2、Shell的作用

3、Shell脚本的概念

4、Shell脚本应用场景

二、Shell编程规范

1、创建Shell 程序的步骤

2、Shell脚本的构成

2.1 编写脚本代码

2.2 赋予可执行权限

2.3 脚本的构成

3、执行脚本的方法

3.1 脚本文件路径(绝对路径与相对路径)

 3.2 sh 脚本文件路径

 3.3 source脚本文件路径

 3.4 其他方法

三、重定向与管道操作

1、交互式硬件设备

 2、重定向操作

3、管道符号

四、Shell变量的作用、类型

(1)变量的作用

(2)变量类型

五、自定义变量

(1)定义新的变量

 (2)查看定义的变量的值

(3)赋值时,使用引号

(4)从键盘输入内容为变量赋值 

(5)export命令

 (6)整数的运算

①expr命令

 ②let命令

③bc命令

六、特殊的Shell变量

1、环境变量

2、只读变量

3、位置变量

4、预定义变量


引言

在一些复杂的Linux 维护工作中,大量重复性的输入和交互操作不但费时费力,而且容易出错,而编写一个恰到好处的 Shell脚本程序,可以批量处理、自动化地完成一系列维护任务,大大减轻管理员的负担。

一、Shell脚本概述

1、什么是Shell

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

用户与内核进行交互过程如下:

  1. 计算机接收用户所输入的的命令
  2. shell会将所接收到的命令转换成计算机所能识别的二进制语言
  3. 再将命令传递给系统内核执行

2、Shell的作用

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

 内核:用于调用计算机硬件资源
shell:将用户指令转换成计算机语言让内核去调用计算机硬件资源

bash是一个文件,linux系统中万物皆文件
bash文件位于/bin/bash

用户的登录Shell

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

 

  • 注:
  • nologin:是奇怪的shell,这个shell可以让用户无法登录主机。
  • bash ( /bin/bash)是目前大多数Linux版本采用的默认shell。

3、Shell脚本的概念

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

4、Shell脚本应用场景

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

二、Shell编程规范

1、创建Shell 程序的步骤

  1. 创建一个包含命令和控制结构的文件。
  2. 编辑完之后修改这个文件的权限使它可以执行 #使用chmod +x 文件名
  3. 检测语法错误(命令集合是否正确) #set -x 追踪脚本是否有故障
  4. 执行脚本./text.sh

2、Shell脚本的构成

2.1 编写脚本代码

  • 使用vim文本编辑器
  • 每行一条Linux命令,按执行顺序依次编写

vim [文件名].sh

2.2 赋予可执行权限

  • 使脚本具有可执行属性

chmod +x text.sh
 

2.3 脚本的构成

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

vim text.txt

3、执行脚本的方法

3.1 脚本文件路径(绝对路径与相对路径)

必须有执行(x)权限

以根目录下的text.sh为例:

./text.sh    #相对路径
/root/text.sh  #绝对路径
 

先给text.sh添加执行权限

 相对路径

 绝对路径

 3.2 sh 脚本文件路径

不需要x权限

 3.3 source脚本文件路径

  • source命令也称为“点命令”,也就是一个点符号(.),是bash的内部命令
  • 不需要x权限,也需要使用相对路径或绝对路径

 

 

 3.4 其他方法

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

三、重定向与管道操作

1、交互式硬件设备

  • 标准输入:从该设备接收用户输入的数据
  • 标准输出:通过该设备向用户输出数据
  • 标准错误:通过该设备报告执行出错信息

 2、重定向操作

3、管道符号

  • 管道操作符:“|”: 将管道符号“|"左侧的命令输出的结果,作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道

 管道符左右只能通过参数,添加“xargs”“增加容错”

四、Shell变量的作用、类型

(1)变量的作用

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

(2)变量类型

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

五、自定义变量

(1)定义新的变量

格式:变量名=变量值
#示例:
[root@localhost ~]#abc=123

 (2)查看定义的变量的值

格式echo $变量名
#示例:
[root@localhost ~]#echo $abc
123

(3)赋值时,使用引号

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

(4)从键盘输入内容为变量赋值 

  • 从read获取输入内容

-p:提示用户的信息
-n:定义字符数
-s:不显示用户输入的内容,常用于输入密码read -s -p “input your password:” pass
-t:定义超时时间,超过多长时间没输自动退出从文件读取内容赋值给变量(默认10s)

  • 方法一

vim read.sh

(5)export命令

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

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

 (6)整数的运算

在 Bash shell环境中,只能进行简单的整数运算,不支持小数运算,整数值的运算主要通过内部命令expr进行。运算符与变量之间必须有至少一个空格。

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

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

运算命令: expr和let

运算工具: bc(系统自带)
 

①expr命令

+ :加法运算。

- :版法运算。

\* :乘法运算,注意不能仅使用 * 符号,否则将被当成文件通配符。

/:除法运算。

%:求模运算,又称为取余运算,用来计算数值相除后的余数。

 

 ②let命令

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

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

[a++]      #先输出再自增1
[++a]      #先自增1再输出
 

③bc命令

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

 

六、特殊的Shell变量

1、环境变量

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

2、只读变量

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

3、位置变量


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

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

例1:编写一个创建用户的脚本,通过位置变量来实现

4、预定义变量

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值