当前位置 : 主页 > 操作系统 > centos >

Linux之Shell管理脚本(一)

来源:互联网 收集:自由互联 发布时间:2022-06-20
一:Shell的作用及常见种类: Shell是一个特殊的应用程序,他介于操作系统内核与用户之间,负责接受用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行。因

一:Shell的作用及常见种类:

Shell是一个特殊的应用程序,他介于操作系统内核与用户之间,负责接受用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行。因此,Shell程序在系统中充当了一个“命令解释器”的角色,eg:微软的cmd.exe也属于Shell程序;

在Unix/Linux操作系统中,能够使用的Shell程序有很多种,功能也比微软的“cmd.exe”要强大的多,下面就是常见到的Shell程序环境,(功能可以自己去了解下:)

Bsh:

Csh:

Ksh:

Bash:

Zsh:

1、Shell环境的切换:

为了提高系统的兼容性,在RHEL5系统中提供了对各种常见Shell程序的支持,通过配置文件“/etc/shells”可以了解系统所支持的shell程序的路径;

查看当前Linux系统中能够使用的Shell程序的列表:

Linux之Shell管理脚本(一)_linux shell

其中有一部分Shell程序实际上是其他Shell程序的符号链接文件,这样做是为了更好地提供Shell程序之间的兼容性,eg:tcsh是csh的兼容升级版本,因此在系统运行csh时将直接运行tcsh。

确认Shell程序中存在的部分链接文件:

Linux之Shell管理脚本(一)_linux shell_02

用户在执行Linux命令操作的过程中,若希望使用其他的Shell程序环境,可以进行相应的切换。

ksh即可切换到ksh程序环境                               //////echo $0

exit即可退回

1.2:更改用户自己的登录Shell

用户每次登录到Linux系统时系统自动加载的Shell程序即为该用户的登录Shell,用户的登录Shell信息记录在“/etc/passwd”文件中,并允许用户通过chsh命令进行修改。

Linux之Shell管理脚本(一)_read_03

使用chsh命令设置了新的登录Shell后,新的登录Shell将在该用户下一次登录系统时生效

1.3:由管理员(root)更改其他用户的登录Shell

usermod -s /bin/bash teacher 即可!

2、Bash的常用功能:(Tab 键的自动补齐。。。。。。)

2.1:命令历史:history

2.2:命令别名:alias

查看已设置的的所有命令别名:

Linux之Shell管理脚本(一)_read_04

eg:设置一个命令别名dir,以便执行“ls -ld --color=tty”的命令,并进行确认。

Linux之Shell管理脚本(一)_read_05

取消上一步设置的dir命令别名:

unalias dir 即可 ///////////alias -a 取消了所有的命令别名

2.3:标准输入输出和重定向、管道操作等等!

3、Shell变量应用:

在各种Shell程序环境中,都使用到了“Shell变量”的概念,Shell变量用于保存系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而相应变化,通过使用变量,Shell程序能够提供更加灵活的功能,适应性更强。

常见的Shell变量的类型包括用户自定义变量,环境变量,预定义编译,位置变量。

3.1:用户自定义变量

用户自定义变量是由系统用户自己定义的变量,只在用户自己的Shell环境中有效,因此又称为本地变量。在编写Shell脚本程序时,通常会需要设置一些特定的自定义变量,以适应程序执行过程中的各种变化,满足不同的需要。

>:定义新的变量,Bash中的变量操作相对比较简单,没有其他高级编程语言(如:C/C++、java等)那么复杂,在定义一个新的变量时,一般不需要提前声明,而是直接指定变量名及初始化值(内容)即可,定义变量操作的基本格式如下(等号两边都没有空格)。

变量名=变量值

eg:DAY=Sunday

>:查看及引用变量的值

echo $DAY 即可

注:在变量DAY的内容后紧跟“Morning“字符串并一起显示。

echo ${DAY}Morning

                   

//错误引用为       echo $DAYMorning          (当变量名称容易和紧跟其后的其他字符相混淆时,需要添加大括号“{}”将其包围起来,否则将无法确定正确的变量名称)

3.2:为变量赋值的常用方法

在等号“=”后边直接指定变量内容是为变量赋值的最基本方法,除此以外,管理员通常还会使用到其他的一些赋值操作,从而使变量内容获取更加灵活多变,以便适用于各种复杂的系统管理任务。常用的几种变量赋值操作包括双引号、单引号、反撇号、read命令。

>:双引号(“)

使用双引号时,允许在双引号的范围使用”$“符号来引用其他变量的值(变量引用)。在简单的赋值操作中,双引号有时候可以省略。

Linux之Shell管理脚本(一)_linux shell_06

>:单引号(’)

使用单引号时,将不允许在单引号的范围内引用其他变量的值,”$“符号或者其他任务将作为普通字符看待;

Linux之Shell管理脚本(一)_shell脚本_07

>:反撇号(`)

使用反撇号时,允许将执行特定命令的输出结果赋给变量(命令替换),反撇号内包含的字串必须是能够执行的命令,执行后会用输出结果替换该命令字串。

Linux之Shell管理脚本(一)_linux shell_08

>:read 命令

除了上述赋值操作以外,还可以使用Bash的内置命令read来给变量赋值。read命令可以从终端(键盘)读取输入,实现简单的交换过程。read将从标准输入读入一行内容,并以空格为分隔符,将读入的各字段分别赋值给指定列表中的变量(多余的内容赋值给最后一个变量)。若指定的变量只有一个,则将赋值内容赋值给该变量。

Linux之Shell管理脚本(一)_shell脚本_09

Linux之Shell管理脚本(一)_linux shell_10

为了使交互式操作的界面更加友好,提高易用性,read命令可以结合“-p”选项来设置提示信息,用于告知用户应该输入的内容等相关事项。

Linux之Shell管理脚本(一)_read_11

3.3:设置变量的作用范围i对于用户自行定义的变量,默认情况下只能在当前的Shell环境中使用,因此称为局部变量。局部变量在新开启的子Shell环境中是无效的(无法引用定义的变量)

eg:在Bash环境定义的变量是不能在csh使用的。

为了使用户定义的变量在所有的子Shell环境中能够继续使用,减少重复设置工作,可以使用export命令将指定的变量设置为“全局变量”。export命令可以同时使用多个变量名作为参数(不需要使用“$”符号),变量名之前以空格分隔。

export haha   即可!

>:export命令还可以在输出变量的同时对指定名称的变量进程赋值(创建),这样在使用export命令之前就不需要单独为变量进行赋值了

eg:定义两个变量MONTH、YEAR,并将其设置为全局变量。

Linux之Shell管理脚本(一)_shell脚本_12

3.4:清除自定义变量:当用户不再需要使用定义变量时,可以使用unset命令对已定义的用户变量进行清除,指定一个或多个变量名称作为参数即可(以空格分隔)

unset DAY MONTH YEAR         //即可!

3.5:数值变量的运算

Bash程序并不适合进行强大的数学运算(如小数、指数等),一般只适合进行简单的整数运算。可以使用expr 表达式命令,格式如下:

expr 变量1 运算符 变量2                            +              -          \*      /  

Linux之Shell管理脚本(一)_read_13

4、环境变量

这里说的环境变了是指用户登录后Linux系统预先设定好的一类Shell变量,其功能是设置用户的工作环境,包括用户宿主目录,命令查看路径,用户当前目录,登录终端等,在实际使用过程中,环境变量并没有严格的区分定义,用户自己设置的变量也可以作为环境变量。

环境变量的名称比较固定,通常使用大写字母,数字和其他字符组成,而不使用小写字母。环境变量的值一般由Linux系统自行维护、会随着用户状态的改变而改变,用户可以通过读取环境变量来了解自己当前的环境。

4.1>:查看环境变量;set  即可!

Linux之Shell管理脚本(一)_shell脚本_14

根据当前环境变量用户可以知道好多内容

Linux之Shell管理脚本(一)_linux shell_15

确认当前的命令搜索路径,并将“/opt/bin”目录添加带现有的搜索路径中去。

Linux之Shell管理脚本(一)_linux shell_16

4.2>:环境变量配置文件

在Linux系统中,用户环境变量的设置工作习惯上在"/etc/profile"文件及用户宿主目录中的“.bash_profile”文件中进行,前者称为全局配置文件(对所有用户起作用),后者成为用户配置文件(允许覆盖 全局配置)。

5:位置变量

所谓位置变量也就是一些$n变量

$12345689

6:预定义变量

预定义变量是由Bash程序预先定义好的一些特殊变量。用户只能使用预定义变量,而不能创建新的预定义变量,或直接修改预定义变量赋值。所有的预定义变量都是由“$”符号和另一个符号组成的,较常用的Shell预定义变量包括以下这些。

$#:表示命令行中位置参数的数量。 $*:表示所有位置参数的内容。 $?:表示命令执行后返回的状态,用户检查上一个命令的执行是否正确。在Linux中,命令推出状态为0表示命令执行正确,任何非0值的表示命令执行错误。 $$:表示当前进程的进程号。 $!:表示后台运行的最后一个进程的进程号。 $0:表示当前执行的进程的进程名。

预定义变量通常使用在Shell脚本程序中,在命令行界面中的应用并不多见(尽管也可以使用)。

7:脚本的概念:

Bash程序不仅可以作为用户管理Linux系统的命令操作环境,同时也可以作为一种优秀的脚本程序语言。凡是使用Shell编程的语言编写的程序都可以称为Shell脚本,通俗一点说,只要将一些Linux命令按顺序保存到一个文本文件中,并给予这个文件可执行权限,那么这个文件就可以称为Shell脚本。当然,Shell脚本是为了完成一定的管理任务才创建的,因此脚本文件中的各条命令并不是杂乱无章随便放置的,这就需要用户来进行组织和设计了。

7.1:编写Shell脚本文件 (建立包含可执行语句的文件文件)

使用文本编辑器程序(如:vi)创建脚本文件,文件名中可以使用扩展名(如:“.sh”),也可以不使用扩展名,并没有强制的要求。脚本中可能包括的内容如下:

>:运行环境设置:通常位于文件的第一行,用户指定使用那一个Shell程序进行解释。设置时以“#!”开始,后面紧跟上指定的Shell程序的完成路径,如“#!/bin/bash”。

>:注释行:在脚本文件中,除了以“#!”开头的Shell环境设置行以外,其他以“#”符号开头的内容将被视为注释信息,执行脚本时将予以忽略。编写脚本程序时,添加必要的注释语句是一个良好的习惯,这样将大大增强脚本文件的易读性,方便在不同时间,不同用户间交流使用。

>:可执行语句:可执行语句是Shell脚本程序中最重要的组成部分,在命令行操作界面中可以执行的命令都可以写入到脚本当中,程序运行时默认情况下将会按照顺序依次解释执行。除此以外,还可以添加一些程序结构语句,用户灵活控制执行过程,提高程序执行效率。

eg:使用vi编辑器编写一个简单的Shell脚本文件test.sh,用于报告当前系统中“/boot”目录所占用的空间大小,并列出其中的内核文件的属性信息。

Linux之Shell管理脚本(一)_环境变量_17

为脚本文件添加可执行权限

chmod a+x test.sh

执行该脚本:bash test.sh

Linux之Shell管理脚本(一)_read_18

7.2:说到执行Shell脚本有多种方式:

>:直接执行带"x"权限的脚本文件

为脚本文件设置了可执行属性后,在Shell命令行中可以直接通过脚本文件的路径执行脚本程序,这也是最常用的一种方式,

Linux之Shell管理脚本(一)_shell脚本_19

执行时需要在文件名之前加入“./”路径,明确执行需要执行当前目录下的脚本文件,这种方法也是出于对系统安全性的考虑。

>:使用Shell解释器程序执行脚本

这种方式可以将脚本文件作为指定Shell解释器程序(如:bash、sh等)的参数,由解释器程序负责读取脚本文件中的内容并执行,因此并不需要脚本文件具有可执行属性。此方法通常只在脚本的调试阶段使用。

Linux之Shell管理脚本(一)_read_20

>:使用“.”命令执行脚本

使用Shell解释器程序(如:bash)执行指定脚本文件时,是在当前Shell中启动一个子Shell来运行脚本程序,因此脚本程序中定义的环境变量只能在子Shell环境中使用,而无法在用户当前的Shell环境中使用。

使用Bash的内部命令“.”(或使用source命令,其作用相同)加载指定的脚本文件并执行时,系统将不会开启新的Shell环境。使用这种方式时,脚本文件作为“.”命令的参数,因此同样不要求脚本文件具备“x”权限。例如,在修改完“/etc/profile”文件以后,可以执行“. /etc/profile”命令,使得在文件中新设置的变量立即生效,而无需重新登录。

Linux之Shell管理脚本(一)_linux shell_21

test.sh脚本在/home/下

实例1:由于公司的文件服务器空间有限,需要完成一向定期任务,即在每周五下班前(17:30)检查公共共享目录"/var/ftp/pub"中的内容,并将其中所有子目录及文件的详细列表和当时的时间信息追加保存到“/var/log/pubdir.log”日志文件中,然后清空目录中的内容。

vim /opt/ftpclean.sh

Linux之Shell管理脚本(一)_linux shell_22

chmod a+x /opt/ftpclean.sh crontab -e 30 17 * * 5 /opt/ftpclean.sh

OK!     记得crond服务

实例2:公司内网开发服务器中的数据库目录位于“/usr/local/mysql/lib/mysql”,根据数据安全管理要求,至少每隔三天要做一次完成备份,备份前需要统计该目录占用的总空间大小,并将备份日期、目录空间大小等信息保存到临时文件“/tmp/dbinfo.txt”中,然后使用tar命令将dbinfo.txt文件随数据库目录一起备份到"/opt/dbbak/"目录中,备份包文件名要要求体现当天的日期。

mkdir /opt/dbbak

vim /opt/dbbak.sh

Linux之Shell管理脚本(一)_linux shell_23

chmod a+x /opt/dbbak.sh crontab -e 55 23 */3 * * /opt/dbbak.sh

记得crond服务


【文章原创作者:华为云代理 http://www.558idc.com/hw.html处的文章,转载请说明出处】
上一篇:vpn之ip隧道应用策略路由实现走向分流
下一篇:没有了
网友评论