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
下一篇 2015-03-30

相关推荐

  • 马哥教育网络班22期+第9周课程练习

    week9: 1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin); 分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash # SHELL1="/sbin/nologin" declare -i sum1=sum2=0 for&nb…

    Linux干货 2016-10-17
  • Linux LVM

    Linux LVM 前言     LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现,目前最新版本为:稳定版1.0.5,开发版 1.1.0-rc2,以及LVM2开发版。无论在Linux或者其他类似…

    系统运维 2016-04-24
  • 马哥Linux第四周作业

    1.复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其他用户均没有任何访问权限 ~]# cp -r /etc/skel/ /home/user1 ~]# chmod -R g0-rwx /home/user1/ 2.编辑/etc/group文件,添加组hadoop 编辑/etc/group 写入:hado…

    2018-01-07
  • 马哥教育网络班22期+第1周课程练习

    1、描述计算机的组成及其功能。     计算机由五大功能部分组成(冯诺依曼体系):运算器、控制器、储存器、输入设备、输出设备,对应到具体的硬件设备如下:     CPU    :    包含运算器、控…

    Linux干货 2016-08-15
  • linux运维

    linux运维大纲,学习路线图

    Linux干货 2017-10-21
  • 第九周:shell脚本之判断练习

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash # declare -i LoginUser=0 declare -i NologinUser=0 while r…

    Linux干货 2016-11-21

评论列表(2条)

  • stanley
    stanley 2015-03-30 23:33

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

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

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