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

相关推荐

  • 系统基础之文件管理工具

    系统基础之文件管理工具   linux的重要哲学思想之一,一切皆文件.那作为系统管理员,就要求对文件的操作管理特别熟悉.那么下面介绍的一个工具可以帮助到大家,更有效,快捷的完成对文件的处理.下面让我们来认识以下的工具. 文本工具: 文件内容:   cat: 复制标准输入到标准输出     选项:   &nbs…

    Linux干货 2016-08-07
  • 在linux中创建虚拟网卡(网卡别名)的方法

    由于业务需要,要在单个物理网卡上建立多个虚拟网卡,操作如下:cd /etc/sysconfig/network-scripts/   #进入网卡目录cp ifcfg-eth0 ifcfg-eth0:1   # 复制出ifcfg-eth0:1虚拟网卡vim ifcfg-eth0:1    #配置ifcfg-eth0:1虚…

    Linux干货 2016-09-06
  • N25_第五周

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;grep -E "^[[:space:]]+" /boot/grub2/grub.cfg 2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;grep -E "^#[[:space:]…

    Linux干货 2017-01-08
  • Linux作业管理、网络客户端工具和bash循环

    Linux系统作业控制;                   job:         前台作业foregroud:通过终端启动,且启动后会一直占据终端;         后台作业…

    Linux干货 2017-01-05
  • 6个变态的C语言Hello World程序

    下面的六个程序片段主要完成这些事情: 输出Hello, World 混乱C语言的源代码 下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C++的编译器g++才能编程通过。 hello1.c   #define _________ }     #define …

    Linux干货 2015-04-01
  • 网络总结

    linux 网络配置 linux的网络服务是由内核提供。 网卡在内核看来就是个设备,各种网络配置不在网卡上。各种配置都是针相应网络管理程序使用的。 不同发行版的网络管理工具也是不一样(net-tools/iproute)。网络服务的管理程序(守护进程)也是不一样(脚本/程序)。 网络管理工具是将用户的设定直接传递给内核的网络服务,及时有效。 很多管理工具可以…

    Linux干货 2016-09-09

评论列表(2条)

  • stanley
    stanley 2015-03-30 23:33

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

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

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