• 一起来学linux:shell script(二)关于脚本


    ()首先来看shell脚本的执行方式,shell脚本的后缀名都是sh文件。

    1 sh test.sh

    2 source test.sh

    这两种方式有什么区别呢。test.sh 里的脚本很简单, 从键盘输入名字后赋值个name变量

    read -p “Please input your name:” name

    执行如下

    root@zhf-linux:/home/zhf/zhf/shell_prj# sh test1.sh

    please input your name:zhf

    root@zhf-linux:/home/zhf/zhf/shell_prj# echo $name


    echo $name是空值。原因前面介绍过。bash在执行脚本的时候,是另起一个子进程。当子进程完成后,子进程内的变量不会传入父进程中去


    但是用source执行脚本就不一样了。 原因在于sourcescript的执行方式是在父进程中进行的。

    root@zhf-linux:/home/zhf/zhf/shell_prj# source test1.sh

    please input your name:zhf

    root@zhf-linux:/home/zhf/zhf/shell_prj# echo $name

    zhf



    在脚本中,避免不了要进行各种条件判断。条件判断有test []两种方式

    test方式:

    read -p "please input your name:" name

    test -z $name && echo "you must input your name"

    -z 是判断字符串是否为0也就空字符串,如果是,则提示输入名字

    root@zhf-linux:/home/zhf/zhf/shell_prj# sh test1.sh

    please input your name:

    you must input your name


    test有很多判断参数,具体可以用man test的进行查看


    []方式:

    read -p "please input your name:" name

    [ -z "$name" ] && echo "please input your name"

    使用[]有几点需要注意:

    1 在中括号内的每个组件都需要有空格键来分隔

    2 在中括号内的变量都需要用双引号起来

    关于第二点,如果不用双引号括起来,会引起如下问题:

    root@zhf-linux:/home/zhf/zhf/shell_prj# name="cq zhf"

    root@zhf-linux:/home/zhf/zhf/shell_prj# [ $name == "cq zhf" ]

    bash: [: too many arguments


    原因在于$name=cq zhf, 如果没有双括号,那么上面的不等式就等于 cq zhf == “cq zhf”。系统会认为是2个变量,因此提示too many arguments.

     

    ()script的变量。

    在执行脚本的时候,会传入某些参数。那么在脚本里面如何监控这些参数呢

    $#代表参数的个数

    $@得到全部的参数

    $1,$2…..代表的是各个参数。其中$0是指的脚本名称。

    root@zhf-linux:/home/zhf/zhf/shell_prj# sh test1.sh one two three

    The scritp name is test1.sh

    The total number of parameter is 3

    The first parameter is one


    如果输入的变量太多,单从顺序上去记忆也比较麻烦,有一种参数偏移的方法可以省事一些。shift命令。这个命令的作用好比是一个FIFO的栈。

    root@zhf-linux:/home/zhf/zhf/shell_prj# sh test1.sh one two three

    The scritp name is test1.sh

    The total number of parameter is 3

    The first parameter is one

    The first parameter is two


    其他流程控制语句,例如if, when, for...do...done等都和其他语言用法类似。

  • 相关阅读:
    WEB环境搭建(tomcat)、Eclipse连接tomcat
    spring—springmvc整合
    声明式事务
    mybatis—当表的字段名和实体类的列名不对应时的三种处理方式
    Spring整合MyBatis
    mybatis关系映射(1对1,1对多,多对多)
    mybatis
    编程式事务
    使用maven在netbeans下构建wicket项目
    mysql问题Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)的解决方法
  • 原文地址:https://www.cnblogs.com/zhanghongfeng/p/7507277.html
Copyright © 2020-2023  润新知