Shell脚本编程规范与变量

一、shell脚本概述

1.1 定义

shell介于用户和计算机内核之间,充当翻译的角色,负责接收用户输入的操作指令并进行翻译,将需要执行的操作传递给内核执行,并输出执行结果。脚本语言,又称扩建语言、动态语言,也是编程语言的一种,主要用来控制软件应用程序。都是以文本形式保存,只有在被调用的时候文本代码才会编译执行。(创建脚本通常以.sh结尾表示shell脚本)

1.2 shell的类型

  • /bin/sh:已淘汰
  • /bin/bash:常用而且是linux默认的shell(管理员)
  • /usr/bin/sh:已淘汰
  • /usr/bin/bash:常用而且是linux默认的shell(普通用户)
  • /bin/tcsh:基于tcsh提供更多的扩展功能
  • /bin/csh:类C语言shell

(若无特殊说明,默认使用的shell就是bash)

如何查看用户使用的shell:

/etc/passwd:查看用户信息

1.3 shell脚本的作用

  • 1、自动化运维(配合定时任务执行)
  • 2、批量化重复操作可以通过脚本执行,减少了人工的重复输入
  • 3、减轻了管理员的工作量
  • 4、提高了处理文件的速度
  • 5、避免配置出错

1.4 shell脚本的组成结构

  • 1、声明解释器,若第一行为“#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来解释执行
  • 2、注释信息,#表示注释,注释掉的代码不会被执行,而是按行进行注释
  • 3、脚本当中的语句,linux的可执行命令都可以作为shell脚本的语句
  • 4、脚本当中的语句按照从上往下,依次按行执行

1.5 shell的执行方式

1、脚本文件路径(需要x权限)

绝对路径执行

相对路径执行

2、sh脚本文件路径(不需要x权限)

3、source或.脚本文件路径(不需要x权限)

创建一个脚本文件:

[root@pup1 opt]# vim first.sh

cd /boot
echo "显示当前所在路径:"
pwd
echo "显示当前目录下vml开头的文件:"
ls -lf vml*

绝对路径的执行方式:

Shell脚本编程规范与变量_第1张图片相对路径的执行方式:

sh 脚本名:只在当前环境运行,并不涉及子shell环境切换

Shell脚本编程规范与变量_第2张图片

source或.脚本名:对于刚刚修改的文件进行初始化操作(文件的内容都是shell语句,都是可执行的命令)执行source可以不需要重启,使更改内容直接生效

新建一个shell,继续执行,而且所有的执行结果都会保存在这个新建的shell中

Shell脚本编程规范与变量_第3张图片

注:

需要执行的脚本不能放在用户的家目录,最好都放在opt目录当中

结合定时任务执行时必须要使用绝对路径

二、重定向与管道操作

2.1 交互式硬件设备

标准输入:对应设备为键盘,文件编号是0,正常执行的命令结果

标准输出:显示器,显示输出的结果

标准错误输出:显示器,显示错误的输入信息

2.2 重定向操作

重定向输入:

<:从指定的文件读取数据,不是从键盘输入读取

重定向输出:

>:将输出结果保存到指定的文件(覆盖原有内容)

>>:将输出结果追加到指定的文件尾部(不会覆盖原有内容)

重定向错误输出:

2>:将错误信息保存到指定的文件(覆盖原有内容)

2>>:将错误信息追加到指定的文件中

混合输出:

&>:将标准输出、标准错误的内容保存到同一个文件之中

2.3 管道符号"|"操作

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

三、变量

3.1 变量及相关定义

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

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

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

变量属性:值的类型

int:整数类型

string:字符串类型

布尔:true、false

浮点:即小数

3.2 变量的类型

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

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

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

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

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

3.3 自定义变量

在自定义变量当中,若赋值整数类型可以不加引号,赋值为字符串类型最好加上引号,以避免歧义

定义一个新的变量

变量名=变量值

查看变量的值

echo $变量名

赋值时使用引号

在给变量赋值时,单引号和双引号一样,不影响变量的值

``:命令替换,先执行反撇号当中的命令,然后再把命令执行的结果赋值给变量

[root@pup1 opt]# abc=123
[root@pup1 opt]# echo '$abc'  //'$abc':强引用,变量值将不再打印,就是$abc这个字符串
$abc
[root@pup1 opt]# echo "$abc"  //"$abc":弱引用,原变量的值不变
123
[root@pup1 opt]# echo "${abc}"  //"${abc}":保证一定能够正确地识别变量值
123
[root@pup1 opt]# result=`echo ${abc}456`
[root@pup1 opt]# echo $result
123456

read命令获取用户输入的内容

read -p 提示信息 变量名

[root@pup1 opt]# read -p "输入一个数值赋予变量:" a
输入一个数值赋予变量:5
[root@pup1 opt]# echo $a
5

变量的命名规范(自定义变量)

1、不要使用Linux的系用命令作为变量名

2、不要使用中文定义

3、不要使用特殊符号作为变量名称的开头,可以使用_作为变量的开头

4、默认规则:定义学生--student;秒--second/sec 、;计算机--computer

5、默认加上注释,变量名的引用保持前后一致

3.4 变量作用范围

局部变量和全局变量

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

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

格式:

export 变量名

export 变量名=变量值

[root@pup1 opt]# abc=123
[root@pup1 opt]# echo $abc  //查看变量abc的值为123
123
[root@pup1 opt]# bash  //进入子shell环境
[root@pup1 opt]# echo $abc  //查看变量,无法显示值

[root@pup1 opt]# exit  //回到原shell环境
exit
[root@pup1 opt]# export abc  //将其输出为全局变量
[root@pup1 opt]# echo $abc
123
[root@pup1 opt]# bash  //再次切换至子shell环境
[root@pup1 opt]# echo $abc  //再次查看变量的值,发现可查看
123

注:需要在一整套环境当中引用唯一且不需要变化的变量时,才会声明全局变量

3.5 特殊的Shell变量

环境变量

定义:系统提前创建,用户也可以添加,设置用户的工作环境,配置系统行为,控制程序执行

特殊的全局变量。

常见环境变量

$USER:显示用户的名称

$HOME:用户的家目录

$PWD:表示当前所在的工作目录

$PATH:可执行用户程序的默认路径

位置变量

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

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

预定义变量

编程语言或者脚本解释器所提供,不能修改,只能根据需要自动设置或者更新

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

$*和$@:不加引号的表现一致,都会把参数分行处理

$*:加上引号,会把参数当成一行来进行处理

[root@pup1 opt]# vim sec.sh
abc () {
 for i in $*
do
 echo $i
done
}
abc "hello" "world" "!"
[root@pup1 opt]# sh sec.sh 
hello
world
!
[root@pup1 opt]# vim sec.sh
abc () {
 for i in "$*"
do
 echo $i
done
}
abc "hello" "world" "!"
[root@pup1 opt]# sh sec.sh 
hello world !

$#:显示需要处理的参数个数

$?:表示前一条命令或者脚本执行之后的返回状态码,只有返回0,表示执行成功,所有非0全部表示执行失败

也可以用在函数中,作为return的返回值

3.6 shell脚本当中整数的运算方式

运算符号: + 加法、- 减法、* 乘法、/ 除法、%取余

例子:(c代表自定义变量,可用任何代替)
 

c=$((变量1 运算符 变量2))
c=$[变量1 运算符 变量2]
c=$(expr变量1 运算符 变量2)
let c=变量1 运算符 变量2

i++:相当于i=$(($+1))每一次都会自增1(先赋值,再加一)

++i:先加1,再赋值

i+=2相当于i=$(($+2))

3.7 shell脚本当中小数的运算方式

bc科学计算机的运用
[root@pup1 opt]# echo "1.1+2.2" |bc
3.3

使用awk进行浮点数的运算

格式:awk "BEGIN{print 算术表达式}"

[root@pup1 opt]# awk "BEGIN{print 1.1+2.2}"
3.3

你可能感兴趣的:(chrome)