码迷,mamicode.com
首页 > 系统相关 > 详细

shell脚本基础

时间:2016-08-15 22:32:48      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:编程程序   程序设计   字符串   能力   linux   

一、什么是shell

     shell既是一个可执行程序,又是一种程序设计语言。作为执行程序,它交互式地解释和执行用户输入的命令,是用户和Unix/Linux沟通的桥梁;作为程序设计语言,它可以定义变量和参数,在一定程度具备编程的能力。虽然不属于系统内核的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序。

二、shell类型

三、shell脚本在编程程序语言中的分类

   bash中的弱类型相对于强类型变量带来三个改变
      1、变量无需声明
      2、声明和赋值可同时进行
      3、变量需要引用$

        对于字符串赋值而言,因为bash中变量无需声明,所以直接赋值即可,c则需要声明。bash胜
        对于数值计算而言,都需要赋值,只不过bash可以赋值声明和赋值可同时进行。胜bash一点点。

       int a  intb int c    c=a+b  print c 

       declare -i c

       declare -i a

       declare -i b

       c=a+b  echo $c  或者  c=$[a+b]

只不过通常写为c=$[$a+$b]  以便识别其他字符串变量引用。变量引用这或许是弱类型语言的又一弱点。

但bash对数值的计算程度的支持远不及c 


root@centos7 /tmp]#a=1
[root@centos7 /tmp]#b=2
[root@centos7 /tmp]#c=$a+$b
[root@centos7 /tmp]#echo $c
1+2
[root@centos7 /tmp]#declare -i a=1
[root@centos7 /tmp]#declare -i b=2
[root@centos7 /tmp]#c=$a+$b
[root@centos7 /tmp]#echo $c
1+2
[root@centos7 /tmp]#declare -i c
[root@centos7 /tmp]#c=$a+$b
[root@centos7 /tmp]#echo $c
3                 ----------------------c不转换数值型,无法识别1+2

   

     面向过程 面向对象        

        面向过程式编程语言

        过程式:以指令为中心来组织代码,数据服务于代码        

     编译型语言  解释性语言

        解释执行,并不像java、c那样生成.class文件再进行编译

四、shell脚本的特点及应用   

      特点:虽然shell编程不像Java那样强大,但是它们能够轻易的处理文件目录之类的对象,例如:打印一个字符串只需要一个echo即可,而不需要像java那样需要定义类和对象之类的框架结构。这也正弥补了解释型语言在速度上的缺陷。

      shell脚本的用途有:

   自动化常用命令

   执行系统管理和故障排除

   创建简单的应用程序

   处理文本或文件

五、shell脚本的语法格式和执行条件   

    语法格式

        第一行必须声明默解释环境(Shabang机制):#!/bin/bash,那么它执行时会默认用当前Shell去解释这个脚本(即:$SHELL环境变量)      

    执行方式:

         作为可执行程序运行(给予执行权限,在命令行上指定脚本的执行路径)

               注:任何一个可执行程序,如果要执行,必须在PATH环境变量中,以保证根可以找到程序,否则无法执行

         作为指定特定解释器的参数运行

六、shell脚本中的语法基础

    变量

    这里当然不是说字符串、整型什么的,其实 bash 中的变量都可以理解为字符串。bash 中有四种类型的变量,它们是环境变量、本地变量、位置变量和特殊变量。    

      本地变量

      环境变量  PATH  PWD   HOSTNAME  HISTORY   

         定义方法:export VALUE

                   declare -x  VALUE

      局部变量

      位置变量  $1,$2

      特殊变量  $#  $*  $@   $?  $0

   运算

     算术运算

         let a=$b+$c

            let a+=1

         a=$[$a+$b]

     逻辑运算

         &&  ||  !

         注意:如果多条命令出现在逻辑关系中,建议加小括号

   条件测试

       字符串测试  

           ~=  :一般使用[[ ]]匹配模式

           ==

           >

           <

           !=  :以上比较的都是字符串对应的ASCII码的大小

           -z : 字符串是否为空,空为真

           -n : 

       数值测试

           -eq

           -ne

           -gt

           -ge

           -lt

           -le

       文件测试

            -e:文件是否存在

            -f:是否存在且为普通文件

            -s:文件是否为空

            注意,测试要加[ ]

   组合测试

        -a  -o  -!

        [ ! -r /tmp/file1 -a ! -w /tmp/file1 ]

        注意:对于字符串测试和数值测试同样适用于此种格式

          1、如果要使用globbing或者正则表达式要使用[[ ]],一般使用在字符串的~=中。

          2、找不到错误时可以更换[]或者[[]]


注意 :组合测试中的-a ,-o,!一般用在测试条件间的逻辑,而逻辑运算中的&&,|| 一般用在命令执行结果中的判断

    命令引用

       $()   ``

    变量替换

       $VALUE

[root@centos7 ~]#a=1
[root@centos7 ~]#b=2
[root@centos7 ~]#ab=3
[root@centos7 ~]#echo $ab
3
[root@centos7 ~]#echo ${a}b
1b
[root@centos7 ~]#

       




本文出自 “dmwing” 博客,请务必保留此出处http://dmwing.blog.51cto.com/11607397/1839019

shell脚本基础

标签:编程程序   程序设计   字符串   能力   linux   

原文地址:http://dmwing.blog.51cto.com/11607397/1839019

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!