Shell脚本编程规范与变量

Shell脚本概述

Shell脚本概念

Shell脚本:将平时使用的各种Linux命令按顺序保存到一个文本文件中,然后添加可执行权限,可结合各种Shell控制语句以完成更复杂的操作。

应用场景:

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

Shell——命令解释器、翻译官

介于系统内核与用户之间,负责解释命令。
用户的登录Shell一般默认为/bin/bash
查看系统支持的Shell种类 cat /etc/shells

Linux常用Shell种类

  • bash
    大多数Linux系统默认使用的shell , bash shell是Bourne shell 的一个免费版本,它是最早的Unix. shell, bash还有一个特点,可以通过help命令来查看帮助。包含的功能几乎可以涵盖shell所具有的功能,所以一般的shell脚本都会指定它为执行路径。
  • csh
    C shell 使用的是“类C”语法,csh是具有C语言风格的一种shell, 其内部命令有52个,较为庞大。目前使用的并不已经被/bin/tcsh所取代。
  • ksh
    Korn shell 的语法与Bourne shell相同,同时具备了C shell的易用特点。许多安装脚本都使用ksh, ksh有42条内部命令,与bash相比有一定的限制性。
  • tcsh
    tcsh是csh的增强版,与C shell完全兼容。
  • zsh
    最为庞大的终极shell,很少使用。
  • sh
    是一个快捷方式,已经被/bin/bash所取代。
  • nologin
    指用户不可登录。

编写Shell脚本

使用vim文本编辑器(vim能检查语法结构,编写是否存在问题)
每一条linux命令,按执行顺序编写

更完善的脚本构成包括

脚本声明 #!/bin/bash
注释信息 # 注释信息
可执行语句

赋予可执行权限:使脚本具有可执行属性
chmod +x [文件名]
执行方法:
方法一:sh 脚本文件路径 (不需要执行权限)
方法二:./脚本文件路径 (需要执行权限来操作)
方法三:source 脚本文件路径 (也不需要执行权限)

标准重定向

  • 标准输入(STDIN):默认的设备是键盘,文件编号为0,命令将从标准输入文件中读取在执行过程需要的输入数据。
  • 标准输出(STDOUT):默认的设备是显示器,文件编号为1,命令将执行后的输出结果发送到标准输出文件。
  • 标准错误(STDERR):默认设备是显示器,文件编号为2,命令将执行期间的各种错误信息发送到标准错误文件。

标准输入、标准输出和标准错误默认使用键盘和显示器作为关联的设备,与操作系统进行交互,完成最基本的输入、输出操作,即从键盘接收用户输入的各种命令字串、辅助控制信息,并将命令结果输出到屏幕上;如果命令执行出错,也会将错误信息反馈到屏幕上。
在实际的Linux系统维护中,可以改变输入、输出内容的方向,而不适用默认的标准输入、输出设备(键盘和显示器),这种操作称为重定向。

重定向操作

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

read命令

read [选项] [参数]
常用选项:
-p:指定读取值时候的提示符
-t: 指定读取值时候等待的时间(秒)
-a array :指定输入一个数组,赋值给array
-n 2 :指定输入字符的任意类型的个数为2
示例1:

[root@server2 ~]# read -p "输入a变量的变量值:" a
输入a变量的变量值:112233aabb
[root@server2 ~]# echo $a
112233aabb
[root@server2 ~]# read -p "yes/no" choice
yes/nono
[root@server2 ~]# echo $choice
no

示例2:免交互设置初始化密码

[root@server2 ~]# vi pass.txt
[root@server2 ~]# useradd zhangsan
[root@server2 ~]# passwd --stdin zhangsan < pass.txt

重定向输出

示例:

[root@server2 ~]# uname -p
x86_64
[root@server2 ~]# uname -p > kernel.txt   覆盖文件
[root@server2 ~]# cat kernel.txt 
x86_64
[root@server2 ~]# uname -p > kernel.txt
[root@server2 ~]# cat kernel.txt 
x86_64
[root@server2 ~]# uname -p >> kernel.txt   追加
[root@server2 ~]# cat kernel.txt 
x86_64
x86_64
[root@server2 ~]# uname -r >> kernel.txt  
[root@server2 ~]# cat kernel.txt 
x86_64
x86_64
3.10.0-693.el7.x86_64    查看操作系统的内核版本

错误重定向输出

[root@server2 ~]# vim http.sh
[root@server2 ~]# chmod +x http.sh
[root@server2 ~]# ./http.sh
[root@server2 ~]# cd /opt/
[root@server2 opt]# ls -lh
[root@server2 opt]# cat cd_err.txt 
[root@server2 opt]# cat con_err.txt 
[root@server2 opt]# cat make_err.txt 
[root@server2 opt]# cat makeinsatll_err.txt 
[root@server2 opt]# cat rh

#!/bin/bash
#apache server install
cd /usr/local/httpd-2.4.25/ &> /opt/cd_err.txt
./configure &> /opt/con_err.txt
make &> /opt/make_err.txt
make install &> /opt/makeinsatll_err.txt

管道符操作“|”

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

[root@server2 ~]# df -Th | grep "/$"   (以“/”为结尾的文件)
[root@server2 ~]# df -Th | grep "/$" | awk '{ print $6 }' (查看以“/”为结尾的文件,并输出第6字段)

Shell变量

变量作用

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

变量类型

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

自定义变量

定义一个新的变量

变量名以字母或下划线开头,区分大小写,建议全大写(系统变量都是大写)

变量名=变量值

查看变量的值

echo $变量名
示例:

[root@server2 ~]# A=abc
[root@server2 ~]# echo $A
abc
[root@server2 ~]# AB=12345
[root@server2 ~]# echo $A $AB
abc 12345

赋值时使用引号

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

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

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

设置变量的作用范围(局部/全局)

格式1:export 变量名——导出为全局变量
格式2:export 变量名=变量值——全局定义
注意:
两种格式仅对当前可用,切换用户不生效。

整数变量的运算

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

常用运算符

加法运算:+
减法运算:-
乘法运算:\*  (\:转义字符,回归本身意思)注意不能仅使用“*”符号,否则将被当成文件通配符
除法运算:/(取商)
求模(取余)运算:%  又称为取余运算,用来计算数值相除后的余数

元字符:具有特殊含义
两个数+、-、*、/、%的方法有三种

[root@server2 ~]# expr 1 + 2
3
[root@server2 ~]# echo $((1+2))
3
[root@server2 ~]# echo $[1+2]
3

注:乘法在直接使用过程中是需要\的,因为*是shell正则表达式中的特殊字符,所以需要转义字符\才能表示其真实含义,但是在(())和[]中不需要转义字符。

特殊的Shell变量

环境变量

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

常见环境变量

PWD、PATH、USER、SHELL、 HOME

只读变量

[root@localhost ~]# name=cloud
[root@localhost ~]# readonly name //设置为只读变量
[root@localhost ~]# echo $name
cloud
[root@localhost ~]# name=yun
-bash: name: readonly variable //只读变量不可以被重新赋值
[root@localhost~]#
[root@localhost ~]# unset name //只读变量不可以被删除
-bash: unset: name: cannot unset: readonly variable

位置变量

表示为$n,n为1~9之间的数字

预定义变量

$#:命令行位置变量的个数
$*:所有位置变量的内容(所有参数视作一个整体)  $@  (区分各个参数)
$?:上一条命令执行后返回的状态,当返回状态值为0时,表示执行正常,非0值表示执 行异常或出错
$0:当前执行的进程/程序名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值