linux之脚本编程基础一

                Linuxshell脚本编程基础(一)

一.        shell脚本的简介

shell是一个命令解释器。他是一种功能强大的编程语言。一个shell程序,通常被称作为脚本,并有系统调用。事实上,shell脚本可以调用整个linux系统命令、软件包、工具。另外,shell的内部命令,如测试和循环控制结构,都使得shell脚本更加的强大和弹性。

二.        为什么要用shell脚本编程

   简单的来说,脚本程序其实是存储在一个文件里的系统命令列表。因此我们可以把许多反复操作的命令组合成一个脚本,使用时调用这个脚本程序即可。另外,我们也可以很容易的修改或者定制一个脚本,来达到我们想要实现的控制命令。

三.        一个简单的例子说明脚本的基本格式

首先我们先建一个hi.sh文件,文件内容如下:

  #/bin/bash

  #

  echo  “hi,how are you?”

1.         第一行的#!是说明该文件类型是一个shell脚本,也就是以.sh结尾的文件。其实在linux中的可执行程序中的前四个字节标识了一个文件的类型。

2.         /bin/bash则表示该文件是一个bash程序,需要有/bin目录下的bash程序来执行,其实就是一个脚本解释器。

3.         第二行的#bash程序的注释,即可以简单的标注一下每一段程序代码的含义,可以让我们的程序更加易懂。

4.        第三行的echo的功能是把引号里的字符串输出到标准输出中去。

由于他是一个文本文件,所有并没有执行权限,那么该如何把他变成一个可执行程序呢?

第一种方法:

  使用chmod +x hi.sh 即赋予该文件执行权限,然后键入 ./hi.sh,改程序即可执行成功。

第二种方法

  因为该文件本身就是一个bash程序,所有可以直接使用bash  ./hi.sh即可执行成功

四.        bash脚本中的一些常用知识介绍

4.1关于输入、输出和错误输出

既然脚本的执行必须要有对应的shell程序来实现,然而程序的重要功能是:读入数据—>处理—>输出数据。所以在此简单的介绍一下linux下的输入、输出和错误输出。

 linux系统中,标准输入默认为键盘输入;标准输出则默认为屏幕输出;标准错误输出默认也是输出到屏幕。

  在这里简单的介绍一下错误输出,它主要是为程序调试和系统维护目的而设置的,错误输出和标准输出分开,可以让一些高级的错误信息不干扰正常的输出信息,从而方便用户的使用。

   bash中标准输入表示为0,标准输出表示为1,错误输出表示为2

输入、输出及标准错误输出主要用于I/O的重定向,即改变默认的数据流向。下面简单介绍几个用法:

> 覆盖输出重定向

例子:ls  /etc > /tmp/et  表示将ls命令的结果输出重定向到/tmp/et下,如果et文件中有内容则被覆盖

 >> 追加输出重定向

例子:ls  -l /etc >> /tmp/et  表示将ls命令的结果输出重定向到/tmp/et下,如果et文件中有内容则不会被覆盖,而是追加到et文件中。

       2> 表示把错误输出重定向

          例子:cat /etc/fstab 2> /tmp/fstab.out 表示将cat命令的错误信息重定向到/tmp/fstab.out

>重定向的文件2>&1 表示将正确的和错误的都输出到一个文件中

   例子:cat /etc/fstab > /tmp/fstab.out 2>&1

       为了防止有时候的误操作,我们可以使用以下命令来限制我们的输入输出重定向

set -C 禁止覆盖信息已存在的文件

    set +C 允许覆盖信息已存在的文件

    >| :允许覆盖信息已存在的文件

    &> :合并输出流至同一个数据流

4.2Bash中变量的介绍

 所谓变量其实就是可变化的量,也是一个有名称的内存空间。在linux中变量可以不用事先声明就可以直接对其进行赋值。

4.21 Bash中的变量类型

  环境变量

    环境变量的作用域是对其当前shell及其子shell都是有效的

   使用declear –x 声明一个环境变量

  本地变量 

     本地变量也称局部变量,其作用域是只对当前shell有效

    使用Local声明一个局部变量

  特殊变量

    Bash中的内置变量,这里以最常用的$?为例简单说明一下

     $?:表示引用上一条命令执行状态的返回值

     返回0:表示上一条命令执行成功

     返回1-255:表示上一条命令执行失败

  位置变量

    位置变量是用于引用传递过来的参数:$1,$2..${1,1}

4.22 声明变量的类型

    声明变量的类型其实是声明了数据的存储格式和数据的表示范围。主要包括整型、字符型、布尔型、浮点型。

declear来声明变量

 Declear –i声明整型,-x 声明环境变量 -a声明数组,-r声明只读变量

4.23、变量的命名规则

1.       只能包含字母,数字和下划线,并且不能以数字开头

2.       不能与关键字冲突

3.       见名知意

4.24、变量的引用

 使用 $+变量名 ${变量名}

 两种引用是有一定区别的,具体看下面例子

NAME=sun

Echo the name is $NAMEy

输出结果:the name is

Echo “the name is ${NAME}y”

输出结果:the name t suny

4.3、条件测试

条件测试是评估一个表达式;如果条件为真,则返回一个 0 值。如果表达式不为真,则返回一个大于 0 的值 也可以将其称为假值

条件测试的符号 []

  [ expression ],[[ expression ]]

  需要说明的是expression 的前后一定要留空格

  测试数值之间的比较:

   [ x –eq y ]测试xy是否相等

   [ x –eq y ]测试xy是否相等

           [ x –gt y ] 测试x 是否大于y

   [ x –lt y ]测试x是否小于y

  测试在字符串的比较

   [ x=y ] 检查xy是否相同

   [ x!=y ] 测试xy 是否不相同

   -n x x不是空字符串(null)则为真

   -z x x是空字符串则为真

例子:

测试 a 不等于 b 则输出1 否则输出 0

[root@root ~]# a=1

[root@root ~]# b=2

[root@root ~]#[ $a -ne $b ] && echo 1 || echo 0

1

条件测试的命令:test

test 文件运算符

test是评估一个表达式,然后返回真或假。如果它和 ifwhile until 命令结合使用,则您可以对程序流进行广泛的控制

利用这些运算符,您可以在程序中根据对文件类型的评估结果执行不同的操作:

-b file 如果文件为一个块特殊文件,则为真

-c file 如果文件为一个字符特殊文件,则为真

-d file 如果文件为一个目录,则为真

-e file 如果文件存在,则为真

-f file 如果文件为一个普通文件,则为真

-g file 如果设置了文件的 SGID 位,则为真

-G file 如果文件存在且归该组所有,则为真

-k file 如果设置了文件的粘着位,则为真

-O file 如果文件存在并且归该用户所有,则为真

-p file 如果文件为一个命名管道,则为真

-r file 如果文件可读,则为真

-s file 如果文件的长度不为零,则为真

-S file 如果文件为一个套接字特殊文件,则为真

-t fd 如果 fd 是一个与终端相连的打开的文件描述符(fd 默认为 1),则为真

-u file 如果设置了文件的 SUID 位,则为真

-w file 如果文件可写,则为真

-x file 如果文件可执行,则为真

接下来我们就举一个测试文件是否存在的例子

[root@root ~]# test –e /etc/ff

1

返回值为1则说明这个文件不存在。

4.5、算数运算符

算术运算符指的是可以在程序中实现加、减、乘、除等数学运算的运算符。Shell中常用的数学运算符如下所示。

 

+:对两个变量做加法。

-:对两个变量做减法。

*:对两个变量做乘法。

/:对两个变量做除法。

**:对两个变量做幂运算。

%:取模运算,第一个变量除以第二个变量求余数。

+=:加等于,在自身基础上加第二个变量。

-=:减等于,在第一个变量的基础上减去第二个变量。

*=:乘等于,在第一个变量的基础上乘以第二个变量。

/=:除等于,在第一个变量的基础上除以第二个变量。

%=:取模赋值,第一个变量对第二个变量取模运算,再赋值给第一个变量。

bash脚本中可以使用如下三种方法计算结果并分别计算1+2的值

 expr  echo `expr 1+2` 其中``是一对反引号而不是单引号

 $[]    echo $[1+2]

 let    b=let 1+2  echo b 可以先赋值给一个变量b 然后输出b

4.6、逻辑运算

 逻辑运算符有:

&& 表示逻辑与运算 双目操作符,两边都为真时才为真否则为假

|| 表示逻辑或运算  双目操作符,两边都为假时才为佳否则为真

表示非运算      单目操作符,为真则为假

[root@root ~]#id redhat && echo “redhat” || useradd redhat && echo “redhat”

这句话首先判断redhat用户是否存在,如果存在则为真然后输出 不过不存在就是假则直接执行 || 后面的内容 增加redhat用户然后输出。

在这三种运算符中,非运算的优先级最高,在运算中都是自左而右的运算。

4.7、用户如何自定义输入

read 变量名

例:read – p “input your name” NAME

其中加上-P选项可以键入提示,用户可以更清楚的知道自己想要输入的东西

 

你可能感兴趣的:(编程,linux,shell,脚本,bash)