脚本,不要想的太神秘,首先要明白它之所以产生的原因------工作中每天都会遇到大量、重复、繁琐的问题,我们为了提高工作效率,而不是一个命令一个命令周而复始的去重复我们已经解决了N变的问题,这样只会浪费时间,加重工作负荷。因此我们需要借助于一种工具,来实现自动化,让一些常见、集中地问题都可以在一个被封装起来的工具中运行,这个工具就是脚本,这就是Shell的意义。一句话,它就是一个工具,通过运用它来解决问题,让复杂的问题变简单,让简单的问题变得自动化。通过熟练的运用脚本,可以简化我们在工作中遇到的问题,让工作更加轻松和高效。

shell是操作系统与用户进行交互的界面

 

下面的内容将会使你明白什么是脚本,如何去编写一个合格的脚本。

//加入文件名字为hello.sh vim hello.sh  输入以下内容:

#!/bin/bash

#

echo "hello red hat"    //保存退出

[root@station30 ~]# bash hello.sh

hello red hat        //OK 第一个脚本实现了,简单吧

  //可以先给hello.sh一个权限 命令如下:

    [root@station30 ~]#chmod +x hello.sh

    [root@station30 ~]#./hello.sh

hello red hat            //OK 两种不同的执行命令

到此为止一个简单的Shell脚本已经完成了,当然这只是一个雏形,我们要在此基础上添枝加叶,一步步来完善我们脚本,那么就和我继续吧

hello.sh中第一行是告诉操作系统此脚本的解释器为 bin/bash 这个可执行文;第二行可以不写;echo 就是是C语言中的printf 输出的功能。

 (1)变量

    脚本中最基本的组成部分是变量,shell也是一种语言,我们知道在一种语言中,变量可以减少命令的冗余,实现重复的引用。

    同样的问题,从不同的角度来分析,结果是不一样的,不过其本质都是一样的。对于变量的分类,也是如此,从不同的角度来分,划分结果是不同的。

    根据作用范围:全局、局部

    根据登陆途径不同:登录式、非登陆式

    根据变量意义:环境变量、本地变量(局部变量)、特殊变量、位置变量

    根据作用效果:系统变量,环境变量,用户变量。其中系统变量是对参数和命令返回值进行判断时使用,环境变量主要是在程序运行时设置,用户变量在编程过程中使用最多。

不论有多少种划分的方式,我们始终要明白如何去运用变量,在什么地方用什么样的变量。

    变量的赋值方法是各不相同的。主要有:直接设置变量值、变量之间的置换、从命令行参数中获取、从环境变量中获取和用户输入等几种方式

引用变量一般采用$value 的形式引用变量value的值

[root@station30 ~]# echo $HOME          //环境变量的引用

  /root

[root@station30 ~]# vim hello.sh

#!/bin/bash

#

NAME=Jerry

echo "hello red hat my name is $NAME" 

[root@station30 ~]# ./hello.sh

hello red hat my name is Jerry          /.这就是变量的引用easy

 

(2) 表达式

  Shell中的表达式分为算数运算表达式、关系与逻辑表达式、正则表达式几种

 1.算数表达式由运算符 + - * / = 组成的表达式 其语法格式为:

   $((expression))  或者 $[expression]

   算数表达式不是命令语句,只是一个数值,如果要输出表达式结果,要使用echo命令,算数表达式中的 * / 运算符前不需要转义符 “/”表达式中对变量的引用也可以不加“$”符号

[root@station30 ~]# echo $[2+3]

5

[root@station30 ~]# echo $((2+3))

5

[root@station30 ~]# X=$[2+3]

[root@station30 ~]# echo $X

5

[root@station30 ~]# echo $[Y=X*5]

25

 2. 关系与逻辑表达式

   命令test与方括号[]都用于进行条件测试,测试的结果返回逻辑值,即真 true (0) 和假 false (1)test 与 [] 可以相互替换,语法格式为

test expression   或 [expression]

    表达式expression是这两个命令的参数,可以是数值、字符和文件这三种类型的关系运算表达式或者相应的逻辑运算表达式。表达式中的操作符与运算符之间必须用空格分隔。

命令测试的结果存储在系统变量$?中,上一条命令的返回值,如果正常退出则为0,反之为非0值 

 数值测试

  test int1 数值测试运算符 int2  或者 [ int1 数值测试运算符 int2]

  常见数值测试运算符如下

运算符

      说明

-eq

等于

-ne

不等于

-gt

大于

-lt

小于

    -ge

大于等于

-le

小于等于

 

 例如:

[root@station30 ~]# test 8 -eq 9

[root@station30 ~]# echo $?

1     

字符串测试

分为双目运算符和单目运算符

    双目运算测试格式为:

    test str1 字符串测试运算符 str2  或 [ str1 字符串测试运算符 str2]

 

    单目运算测试格式为:

    test 字符串测试运算符 str  或  字符串测试运算符 str]

运算符

说明

=

如果str1str2相同,为真

!=

如果str1str2不同,为真

-z

如果str的长度为0,则为真

-n

如果str的长度不为0,则为真

  例如: 

[root@station30 ~]# OS="red hat enterprise linux"

[root@station30 ~]# test "$OS" = " red hat linux"

[root@station30 ~]# echo $?

1     

[root@station30 ~]# test -n "$OS"

[root@station30 ~]# echo $?

0

ƒ文件测试

文件测试运算符用于判断文件是否存在、文件类型及属性等。格式为:

test 文件测试运算符 filename   或  文件测试运算符 filename ]

运算符

说明

-e

Filename存在,为真

-f

Filename存在且为普通文件,为真

-d

Filename存在且为目录,为真

-r

    Filename存在且可读,为真

-w

    Filename存在且可写,为真

-x

    Filename存在且可执行,为真

[root@station30 ~]# test -e hello.sh

[root@station30 ~]# echo $?

0

逻辑运算

有时在一条语句中可能要进行两个或多个关系运算,这就需要用逻辑运算符将这些关系运算组合起来。前面说过shell也是一种设计语言,所以它的逻辑运算中也有与、或、非3种

运算符

说明

!

非 

-a

与 都为真,则为真

-o

或  有一个为真,则为真

例如:

[root@station30 ~]# [ $var -ge 100 -a $var -le 200 ]

[root@station30 ~]# echo $?

0

 

以上内容简单阐述了脚本中的组成部分:变量和表达式,这些东西在脚本中是必不可少的,以后我们会学到正则表达式、流程控制结构、函数等。这些最基本的东西会将它们有效的连接在一起。