Bash Shell编程初学基础篇之一

 Bash Shell编程初学基础篇之一

说明 本文仅供初学Linux  Bash  shell学员参考学习,大神们如有兴趣请批评指正!!!

   相信对于很多Linux初学者或者仅仅是听说Linux还没有接触过的同学会有一种神秘感或者不敢碰触的感觉,今天就帮大家揭开它的神秘面纱,其实并没有那么深不可测,只要你敢,你有决心去下工夫看完以下内容(是时候该逼自己下决心去做一些事情了!!!)。废话少说,浪费大家宝贵时间。

 概述 以下主要从Bash脚本的格式,变量,基本运算语法和实例来讲解;每个实例都保证运行测试通过,然后截屏与大家分享;大家通过一些简单的实例相信会很快上手,不要灰心,要相信自己;人和人之间的差距就在于用心去做。

基本内容:

  1. Shell脚本的基本格式:

    1. vim等编辑器新建一个bash.sh的文本文件,第一行以#!/bin/bash开头即可。

    2. 一个规范的Shell的基本格式如下:

    #!/bin/bash
    # Description :test
    # Version 0.0.1
    # Author:zgq
    # Date :time

第一行是标准格式,我们在此处仅针对Bash来说,必须这样写,任何一门语言都有其规范;第二行Description简单描述一下Shell的基本功能,第三行Version版本信息,第四行Author:作者信息,第五行Date:日期时间。除了第一行,其他以#开头的行均为注释信息,会被解释器忽略。

希望大家在以后实现脚本功能之后将此信息补充完整,存在既有其将来被用到的一天。

实例:新建一个脚本/tmp/test.sh实现如下功能:

         1) 新建一个用户magedu,

2)创建目录/tmp/hellobash

3)复制/etc/rc.d/init.d/functions/tmp/hellobash

大家动手新建这个一个简单的脚本,熟悉一下其基本的写法规范。其实Shell脚本是一个过程式编程语言,把常用的Shell命令按顺序罗列起来就是一个脚本。

bash1.png

       脚本写完了,我们怎么去执行它呢?

首先用ll命令看一下此脚本是没有执行权限的,用chmod  +x  /tmp/test.sh

赋予执行权限;然后用bash  –n  test.sh 此功能是语法测试,如果没有任何结果则是最好的结果,bash  –x  test.sh 单步执行显示其运行过程结果;

或者我们直接bash  test.sh 执行脚本。

  1. 变量概述:

    Bash变量名称命令规则:

a)只能包含字母、数字和下划线,并且不能以数字开头;

b)不能与系统中环境变量重名
       c)
见名知意

Bash变量赋值和撤销:

Bash属于弱类型语言,任何变量无需事先声明,可直接使用,值默认都是字符型;

   格式  变量=

                   例如: a=abc

                               declare  -i  varname=0

变量撤销: unset varname

变量类别:

                            本地变量:作用域为整个bash进程

                            环境变量:作用域为当前shell进程及其子进程

                            局部变量:作用域只对当前代码段有效

                            位置变量:$1,,,$n,${10} ,,,,,

                            特殊变量:

                                     $?:状态返回值

                                     $#:传递给脚本参数的个数

                                     $*:显示所有的参数

                                     $@:引用传递给脚本的所有参数

      实例:    写一个脚本如下

bash2.png

执行结果解析:在脚本后面输入了4个参数,那么$1的值为1,$2的值为2,$*的值为所有参数值,$#的值为参数的个数4个,$@的值是所有参数的值,$0的值为返回脚本的名称,$?的值为此脚本执行状态的返回值0,脚本执行成功的状态返回值为0,如果脚本执行错误会返回1-255的值; 

 实例扩展:写一个如下脚本运行

bash4.png

bash15.png

          结果分析:输入四个参数,$1的返回值为1$2的返回值为3$*的返回值为34,所有参数的值(可以理解为一共四个参数,两个shift,所以把左边两个参数值释放),$#返回参数的个数2个。由以上结果可以得出shift  [n]的作用是把左边n个参数的值释放掉;                  

                   Bash基本运算:

Bash 支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。expr 是一款表达式计算工具,使用它能完成表达式的求值操作

                   1、算术运算:                                

+

加法

`expr $a + $b` 结果为 30

减法

`expr $a – $b` 结果为 10

*

乘法

`expr $a \* $b` 结果为  200

/

除法

`expr $b / $a` 结果为 2

%

取余

`expr $b % $a` 结果为 0

=

赋值

a=$b 将把变量 b 的值赋给 a

==

相等。用于比较两个数字,相同则返回 true

[ $a == $b ] 返回 false

!=

不相等。用于比较两个数字,不相同则返回 true

[ $a != $b ] 返回 true

乘号(*)前边必须加反斜杠(\)才能实现乘法运算;   

实例:

bash5.png

执行结果如下:

bash6.png

              2、关系运算

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

运算符

说明

举例

-eq

检测两个数是否相等,相等返回 true。

[ $a -eq $b ] 返回 true。

-ne

检测两个数是否相等,不相等返回 true。

[ $a -ne $b ] 返回 true。

-gt

检测左边的数是否大于右边的,如果是,则返回 true。

[ $a -gt $b ] 返回 false。

-lt

检测左边的数是否小于右边的,如果是,则返回 true。

[ $a -lt $b ] 返回 true。

-ge

检测左边的数是否大等于右边的,如果是,则返回 true。

[ $a -ge $b ] 返回 false。

-le

检测左边的数是否小于等于右边的,如果是,则返回 true。

[ $a -le $b ] 返回 true。

bash7.png

执行结果如下:

bash8.png

字符串运算:                                 

运算符

说明

举例

=

检测两个字符串是否相等,相等返回 true。

[ $a = $b ] 返回 false。

!=

检测两个字符串是否相等,不相等返回 true

[ $a != $b ] 返回 true

-z

检测字符串长度是否为0,为0返回 true

[ -z $a ] 返回 false

-n

检测字符串长度是否为0,不为0返回 true

[ -n $a ] 返回 true

str

检测字符串是否为空,不为空返回 true

[ $a ] 返回 true

bash9.png

执行结果如下:

bash10.png

布尔运算符

运算符

说明

举例

!

非运算,表达式为 true 则返回 false,否则返回 true

[ ! false ] 返回 true

-o

或运算,有一个表达式为 true 则返回 true

[ $a -lt 20 -o $b -gt 100 ] 返回 true

-a

与运算,两个表达式都为 true 才返回 true

[ $a -lt 20 -a $b -gt 100 ] 返回 false

bash11.png

执行结果如下:

bash12.png

                            文件测试运算符列表:

操作符

说明

举例

-b file

检测文件是否是块设备文件,如果是,则返回 true。

[ -b $file ] 返回 false。

-c file

检测文件是否是字符设备文件,如果是,则返回 true。

[ -b $file ] 返回 false。

-d file

检测文件是否是目录,如果是,则返回 true。

[ -d $file ] 返回 false。

-f file

检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。

[ -f $file ] 返回 true。

-g file

检测文件是否设置了 SGID 位,如果是,则返回 true。

[ -g $file ] 返回 false。

-k file

检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。

[ -k $file ] 返回 false。

-p file

检测文件是否是具名管道,如果是,则返回 true。

[ -p $file ] 返回 false。

-u file

检测文件是否设置了 SUID 位,如果是,则返回 true。

[ -u $file ] 返回 false。

-r file

检测文件是否可读,如果是,则返回 true。

[ -r $file ] 返回 true。

-w file

检测文件是否可写,如果是,则返回 true。

[ -w $file ] 返回 true。

-x file

检测文件是否可执行,如果是,则返回 true。

[ -x $file ] 返回 true。

-s file

检测文件是否为空(文件大小是否大于0),不为空返回 true。

[ -s $file ] 返回 true。

-e file

检测文件(包括目录)是否存在,如果是,则返回 true。

[ -e $file ] 返回 true。

bash13.png

执行结果如下:

bash14.png

好了,时间紧,就先说到这里,有不完整和补充的地方希望大家指正。接下来有时间在说Shell的基本语法格式条件语句:if,case,循环语句:for while,until.希望大家有好的意见和建议并批评指正!!!我们一点一滴的去慢慢稳扎稳打,相信有一天你会成为你想成为的人!!!

 

原创文章,作者:wxdz_2004(古雨秋),如若转载,请注明出处:http://www.178linux.com/1974

(0)
wxdz_2004(古雨秋)wxdz_2004(古雨秋)
上一篇 2015-03-28 23:34
下一篇 2015-03-30 11:15

相关推荐

  • 对inode的初步理解

    1.什么是inode?     inode中文译作”索引节点“,是linux操作系统中的一种数据结构,用来存储文件的元数据信息。在linux系统中每个文件都会分配一个inode,我们也可以把inode看作指针,它永远指向文件的具体存储位置。 2.inode中包含了什么信息? * inode 编号 * 用来识别文件类型,以及用于 …

    2017-07-18
  • 模拟centos6.8系统下initramfs文件和vmlinuz文件损坏恢复

    实验一:关于删除initramfs-2.6.32-642.el6.x86_64.img 文件恢复实验,实验环境centos6.8系统 1.安全起见,请先安排做快照及备份 把initramfs-2.6.32-642.el6.x86_64.img 文件复制一份/root目录下。 [root@centos6: boot]# cp -a initramfs-2.6.…

    2017-05-15
  • LINUX的初探

    一般而言,计算机的组成遵循着“冯诺依曼体系结构”。这种结构的体现实质上是一种存储程序的原理,把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式来存储。这种结构的要点是:计算机的数制采用二进制;计算机应该按照程序顺序执行。

    2018-03-04
  • 文本处理工具补充之sed命令

    sed:stream editor,行编辑器         sed命令工作原理:它在处理数据时,每次只处理一行,首先把当前处理的行存储在临时缓冲区中,我们称这个缓冲区称为“”模式空间“,接着用sed命令处理缓冲区中的内容,处理完后,把缓冲区中的内容送到屏幕上显示出来,接着去处理…

    Linux干货 2016-08-11
  • M22 Centos设置yum源方法

    实验目的: 使用虚拟机模拟建立yum源服务器,在客户机上指定yum源为该服务器。 实验器材: WMware12安装Centos6.8虚拟机作为yum服务源 WMware12安装Centos7.3 作为客户端访问yum源服务器 实验原理图: 实验过程: 服务器端: 1、  显示已经挂载的光盘 #cd /misc/cd #先执行此命令才可以看到光盘挂载…

    2017-03-06
  • KVM虚拟化平台部署及管理

    前言 KVM即Kernel Virtual Machine,最初是由以色列公司Qumranet开发。2007年2月被导入Linux 2.6.20核心中,成为内核源代码的一部分。2008年9月4日,Redhat收购了Qumranet,至此Redhat拥有了自己的虚拟化解决方案,之后便舍弃Xen开始全面扶持KVM,从RHEL6开始KVM便被默认内置于内核中。本文…

    Linux干货 2015-07-19

评论列表(2条)

  • stanley
    stanley 2015-03-30 23:33

    有理论有实战,不错。 格式上稍乱了些,虽然了些调整,整体效果还不是特别理想。另: 如果加上标签seo的效果会非常好

    • 古雨秋
      古雨秋 2015-04-01 21:43

      @stanley多谢指点,在word中写的,然后粘贴到博客里面,表格的大小无法调整,后续继续努力,请多指教!