上篇文章初步认识了一下shell脚本及其简单的案例,下面我们再来讲一下shell的进击部分。

一.变量

  1.常用系统变量:($HOME、$SHELL、$PWD、$USER)

  2.自定义变量:

    2.1.基本语法

      *定义变量:变量=值

      *撤销变量:unset 变量

      *声明静态变量:readonly 变量

    2.2.变量定义规则:

      *变量名称可以由字母、数字、下划线组成,但是不能以数字开头,环境变量名建议大写;

      *等号两侧不能有空格;

      *在bash中,变量默认类型为字符串类型,无法直接进行数值运算;

      *变量的值如果有空格,需要用双引号或单引号括起来。

    2.3.案例:

      *定义变量 A,并输出

      

      *撤销变量,输出空

      

      *声明静态变量,不能unset,再次赋值报错

      

      *在bash中,变量默认类型为字符串类型,无法直接进行数值运算

      

      *变量的值如果有空格,需要使用双引号或单引号括起来

      

      *把变量提升为全局变量export,(在.sh文件中添加以下图一内容)

          

  3.特殊变量:($n、$#、$* 、$@、$?)

    3.1.$n

      3.1.1.基本语法:

        n为数字,$0代表该脚本名称,$1-$9代表第一到九个参数,十以上的需要用花括号包起来,例:${10}

      3.1.2.案例(输出该脚本文件名称、输入参数1和输入参数2 的值):   

        *创建.sh文件并写入内容赋予权限[chmod +x ./test.sh](touch test.sh)     

        

        *输出内容

        

     3.2.$#

       3.2.1.基本语法:

        获取所有输入参数个数,常用于循环

      3.2.2.案例(获取输入参数个数)

          

         3.3.$*、$@

      3.3.1.基本语法

        $*:代表命令行中所有参数,把所有参数看做一个整体;

         $@:代表命令行中所有参数,把每个参数区分对待。

      3.3.2.案例(打印输出所有参数):

           

      3.4.$?

      3.4.1.基本语法

        最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0,则证明上一个命令执行不正确

      3.4.2.案例(判断某脚本是否正确执行)

        

二.函数

  1.系统函数(basename、dirname):

    1.1.basename(删掉所有的后缀包括最后一个“/”字符,然后将字符串显现出来)

      *案例(截取路径的文件名称)

      

    1.2.dirname(从给定的包含绝对路径文件名中去除文件名,返回剩下的路径)

      *案例(截取文件的绝对路径)

      

  2.自定义函数:

    2.1.注意

      *必须在调用函数地方之前,声明好函数,shell脚本是逐行运行,不会像其他语言一样先编译;

      *函数返回值,只能通过 $? 系统变量获得,可以显示加return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)

    2.2.案例(计算两个输入参数和)

        

三.运算符

  1.基本语法:

    *"$((运算式))"或"$[运算式]"

    *expr + , - , \* , / , %  加,减,乘,除  (expr运算符之间要有空格)

  2.案例(计算3+2的值):

    

四.条件判断

  1.基本语法:

  [ condition ]:(前后要有空格,条件非空即为true,反之false)

  2.常用判断条件:

    2.1.两整数之间比较

      = :字符串比较  -lt:小于  -le:小于等于  -eq:等于  -gt:大于  -ge:大于等于  -ne:不等于

    2.2.按照文件权限进行判断

      -r:有读的权限  -w:有写的权限  -x:有执行分权限

    2.3.按照文件类型进行判断

      -f:文件存在并且是一个常规分文件  -e:文件存在  -d:文件存在并是一个目录

   3.案例:

    *23是否大于22  0:true  其他:false

    

    *多条件判断(&&表示前一条命令执行成功时,才执行后一条命令;||表示上一条命令执行失败时,才执行下一条命令)

    

五.流程控制

  1.if 判断

    1.1.基本语法(中括号与条件之间必须有空格,if后要有空格)

    

    1.2.案例(判断用户输入的信息,如果是1则输出OK,2输出NOTOK,其他的不输出):

      

  2.case 语句

    2.1基本语法(双分号表示命令序列结束,相当于java中的break;最后的 * 表示默认模式,相当于java中的 default)

    

    2.2.案例

      

  3.for 循环

    3.1.基本语法

      

    3.2.案例(从1加到100):

      

  4.while 循环

    4.1基本语法

    

    4.2.案例(从1加到100):

      

   

Shell变量、函数的更多相关文章

  1. linux shell自定义函数(定义、返回值、变量作用域)介绍

    http://www.jb51.net/article/33899.htm linux shell自定义函数(定义.返回值.变量作用域)介绍 linux shell 可以用户定义函数,然后在shell ...

  2. linux shell 自定义函数(定义、返回值、变量作用域)介绍

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ f ...

  3. 转 linux shell自定义函数(定义、返回值、变量作用域)介绍

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ f ...

  4. shell变量、函数和数组以及字符串的截取

    一.变量 1.shell变量名 (1)可以由字母.数字.下划线等字符组成.但是第一个字符必须是字母或者下划线. (2)若果变量中包含下划线(_)则要特别注意,$project_svn_$date.ta ...

  5. Linux操作系统shell与函数详解

    shell和函数的定义 1. linux  shell 函数 将一组命令集或语句形成一个可用的块, 这些语句块称为函数. 2. shell  函数的组成 函数名:函数名字,注意一个脚本中函数名要唯一, ...

  6. shell之函数

    function 所有函数在使用前必须定义.这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用.调用函数仅使用其函数名即可.可以将函数看作是脚本中的一段代码,但是有一个主 ...

  7. 《Linux shell变量总结回顾》RHEL6(转)

    文章版权:http://www.cnblogs.com/linux-super-meng/ 环境变量路径: [root@localhost ~]# set   //查看到的是局部变量和全局变量2种 [ ...

  8. $ cd `dirname $0` 和PWD%/* shell变量的一些特殊用法

    在命令行状态下单纯执行 $ cd `dirname $0` 是毫无意义的.因为他返回当前路径的".". $0:当前Shell程序的文件名dirname $0,获取当前Shell程序 ...

  9. shell变量数学运算

    shell变量数学运算 #!/bin/sh # 本脚本说明shell脚本中变量运算的用法 # 错误的用法var=1var=$var+1echo $var 输出:1+1 # 第一种用法,letvar=1 ...

  10. Linux shell 自定义函数

    一.定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1.可以带functi ...

随机推荐

  1. 【建议收藏】阿里P7总结的Spring注解笔记,把组件注册讲的明明白白

    环境搭建 注解的方式是通过配置类的方式来注入组件,注解注入要比XML注入的方式简单,注解注入也需要在前者的基础上,添加一个spring-context的包,也是实际开发中常用的方式. 准备所需Jar包 ...

  2. CorelDRAW软件的出血位详解

    出血位,一种常见的印刷术语,在印刷品中,设计的图形一般比成品尺寸要大,会加一些延伸,专门用来给生产工艺中的公差范围使用,以避免最后裁切的成品中有白边或是裁到内容.多出来的部分在印刷后要被裁掉,这部分就 ...

  3. 唯一key的生成规则,可自己视情况改动

    <?php function getMillisecond() { $time = explode ( " ", microtime ()); $time = $time[1 ...

  4. Linux 设置静态路由表

    一般来说多半不会使用到这个操作,但是最近有几台服务器需要多网卡,一个内网一个外网.导致网络访问内网有时候不通,这就需要我们手动写一下路由表了.操作如: 创建配置文件 网卡配置路径:/etc/sysco ...

  5. img标签到底是行内元素还是块级元素

    面试官问你<img>是什么元素时你怎么回答 写这篇文章源自我之前的一次面试,题目便是问img标签属于块级元素还是行内元素,当时想都没想就说了是行内(inline)元素,面试官追问为什么能够 ...

  6. Apache HTTPD 换行解析漏洞--CVE-2017-15715

    CVE-2017-15715 一.漏洞描述 Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页.其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1 ...

  7. 不使用 MQ 如何实现 pub/sub 场景?

    hello,大家好,我是小黑,又和大家见面啦~~ 在配置中心中,有一个经典的 pub/sub 场景:某个配置项发生变更之后,需要实时的同步到各个服务端节点,同时推送给客户端集群. 在之前实现的简易版配 ...

  8. Java 关于策略模式+简单工厂模式下的思考

    导读 最近在做公司一个消息网关的服务,包括:短信.微信.邮件等,所有请求通过一个入口,方便接口的管理(记录日志.接口限流白名单啥的).如何写这个接口呢,还有为了以后扩展,对接过短信.微信.公众号的童鞋 ...

  9. 冲刺随笔——Day_Three

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺 作业正文 正文 其他参考文献 无 ...

  10. 冲刺随笔——Day_Four

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺 作业正文 正文 其他参考文献 无 ...