Shell编程规范与变量

本文介绍了Shell脚本的基本概念、应用场景和编写方法,包括如何赋予脚本执行权限,使用重定向和管道操作。详细讲解了变量的使用,如类型、赋值和运算,并探讨了环境变量、只读变量、位置变量和预定义变量。内容涵盖从简单的脚本编写到复杂操作的实现,是学习Linux自动化管理的实用教程。
摘要由CSDN通过智能技术生成

目录

前言

一、Shell脚本

1、Shell脚本概念

2、Shell脚本应用场景

3、Shell的作用

4、编写脚本代码

4.1  编写脚本

4.2  赋予执行权限 

4.3  显示消息

二、重定向与管道操作

1、重定向概念

2、交互式硬件设备

3、重定向的操作

三、变量

1、作用

2、类型

3、查看变量的值

4、赋值时使用引号等

5、read 从键盘中获取变量的值

6、echo 的常见用法

7、局部变量和全局变量

8、整数变量的运算

8.1  格式

8.2  常见的运算表达式

四、特殊的Shell变量

1、环境变量

2、只读变量

3、位置变量

4、预定义变量 

总结


前言

随着Linux系统在企业中的应用越来越多,服务器的自动化管理也越来越重要。一些复杂的维护工作中,一个恰到好处的Shell脚本,可以批量处理、自动化的完成一系列维护任务,从而减轻管理员的负担。

一、Shell脚本

是弱编程语言,用户和内存之间的翻译官,把用户输入的指令翻译成计算机识别的二进制语言

1、Shell脚本概念

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

2、Shell脚本应用场景

  • 重复性操作:例如写个for循环,批量性任务
  • 交互性任务 :通过免交互性
  • 批量事务处理
  • 服务运行状态监控:例如监控磁盘空间,内存使用率,服务的状态等
  • 定时任务执行

3、Shell的作用

作用:命令解释器,“翻译官”
●介于系统内核与用户之间,负责解释命令行
用户输入→shell→Linux内核→硬件→反馈用户

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

4、编写脚本代码

4.1  编写脚本

  • 使用vim编辑器
  • 每行linux命令按照从上往下的顺序读取 
vim /root/first_demo.sh               #使用vim编辑器
#! /bin/bash                          #脚本解释器声明
# This is my first Shell-Script.      #注释,在写脚本时要加注释,一般是一半脚本一半注释,注释内容最好使用英文,因为中文模式容易导致代码出现错误
cd /boot
echo "当前的目录位于:"
pwd
echo "其中以vml开头的文件包括: "
ls -lh vml*

4.2  赋予执行权限 

方法一:脚本文件路径(绝对路径和相对路径),要求文件必须有 x(可执行)权限

chmod +x / root/first_demo.sh
指定绝对路径:  /root/first_demo.sh
指定相对路径:  ./first_demo.sh

方法二:sh脚本文件路径,不要求文件必须有 x (可执行)权限

sh first_demo.sh

方法三:source脚本文件路径,不要求文件必须有 x (可执行)权限

source first_demo.sh  或者 . source first_demo.sh

实例:

4.3  显示消息

二、重定向与管道操作

1、重定向概念

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

将管道符号“|”左侧的命令输出的结果,作为右侧命令的输入(处理对象) 。


ps aux | wc -l                                  #查看进程数
echo "abc123" | passwd --stdin zhangsan                                 #给zhangsan用户设置密码abc123

2、交互式硬件设备

  • 标准输入:从该设备接受用户输入的数据
  • 标准输出:通过该设备向用户输出数据
  • 标准错误:通过该设备报告执行出错信息
类型设备文件文件描述编号默认设备
标准输入/dev/stdin0键盘
标准输出/dev/stdout1显示器
标准错误/dev/stderr2显示器

3、重定向的操作

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

 实例:重定向输出和输入

标准错误输出

混合输出

三、变量

1、作用

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

2、类型

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

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

    环境变量: 由系统维护,用于设置工作环境

    位置变量: 通过命令行给脚本程序传递参数

    预定义变量: Bash中内置的一类变量,不能直接修改

    只读变量:只能声明,但不能修改和删除

3、查看变量的值

echo $变量名

4、赋值时使用引号等

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

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

反撇号:命令替换,提取命令执行后的输出结果,`...`和$(...)作用相同

实例:

 

5、read 从键盘中获取变量的值

方法一:

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

方法二:

#!/bin/bash

echo -n "提示信息:"

read 变量名<br>echo $变量

实例:

6、echo 的常见用法

echo -n #表示不换行输出

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

在这里插入图片描述 

7、局部变量和全局变量

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

可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用

格式:

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

实例:

8、整数变量的运算

8.1  格式

expr 变量1 运算符 变量2 [运算符 变量3]
运算符:+ 加法、-减法、\*乘法、/除法、%取余

8.2  常见的运算表达式

(result代表自定义变量,可用任意代替)
result=$(expr 变量1 运算符 变量2)
result=$((变量1 运算符 变量2))
result=$[变量1 运算符 变量2]
let result=变量1 运算符 变量2

数字运算:i=$(expr 10\*8) 变量运算:i=$(expr $a \* $b)
数字运算:i=$((10 * 8)) 变量运算:i=$(($a * $b))
数字运算:i=$[10 * 8] 变量运算:i=$[$a * $b]
数字运算:let i=10 * 10 变量运算:let i=$a*$b
 
i++相当于i=$[$i + 1]
i--相当于i=$[$i - 1]
i+=1相当于i=$[$i + 1]

实例:

四、特殊的Shell变量

1、环境变量

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

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

echo $PATH      #查看当前搜索路径
PATH="$PATH:/root"  #将/root目录添加到搜索路径
export PATH="$PATH:/root"   #输出为全局环境变量

实例:

2、只读变量

readonly命令用于定义只读shell变量和shell函数。readonly命令的选项-p可以输出显示系统中所有定义的只读变量 。

格式:readonly 【选项】【参数】

name=lili
readonly name        #设置为只读变量
echo $name
name=lulu           #只读变量不可以被重新赋值
unset name         #只读变量不可以被删除,unset命令用于删除变量

实例:

3、位置变量

  • 当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。
  • $n: n为数字,$0代表命令本身,$1- $9代表带一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为${10}

实例:

4、预定义变量 

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

$*:把所有参数看成以空格分隔的一个字符串整体(单字符串)返回,代表"$1 $2 $3 $4"

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

$0:表示当前执行的脚本或命令的名称。

$#:表示命令或脚本要处理的参数的个数

$?:表示前一条命令或脚本执行后的返回状态码,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。也常被用于Shell脚本中return退出函数并返回的退出值。


$*、$@不加双引号时表现一致;加双引号时,$*会将所有参数作为一个整体。
vim bianliang.sh
#!/bin/bash
test()  {
        echo "未加引号,二者相同"
        echo $*
        echo $@
        echo "加入引号后对比"
        for N in "$*"
        do
            echo $N
            echo " "
        done
        
        echo "----"
        for N in "$@"
        do
           echo $N
           echo " "				
        done					
}
test 12 34 56 78

实例:$?的使用,可用来判断服务状态是否正常

总结

• Shell的概念与应用场景
• Shell脚本的编写规范与执行方法:
• 重定向与管道的作用与使用方法
• 自定义变量赋值时单引号、双引号、反撇号的使用方法
• 数值变量的常用运算符: +、-、 \ *、 /、 %
• 环境变量、 只读变量、位置变量、预定义变量的用途  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值