文档章节

shell编程总结10(入参)

心中的理想乡
 心中的理想乡
发布于 2017/02/25 21:31
字数 886
阅读 2
收藏 0

1、向命令行脚本传入参数的方法举例:
    ./shell 10 30
这种就是传入shell脚本里面两个参数10和30

2、命令行内部访问传入的变量的方法:
$0:表示的是程序名;$1:表示的是传入的第一个参数;$2:表示的是传入的第二个参数
    注意:
    (1)如果传入的参数是有空格的话,必须加上单引号
    (2)如果脚本需要多于9个的命令行参数的话,在第九个变量之后,你必须使用加上花括号的,例如:${10}

3、测试参数:当脚本传入的参数,并没有脚本内部使用的参数的时候,就会报错。所以我们在使用脚本传入的参数之前,最好进行参数的校验
    举例:
        #!/bin/bash
        if[ -n "$1" ]
        then
            echo Hello $1.
        else
            echo "Sorry"
        fi
    说明:使用-n参数进行检测是否有数据

4、特殊参数变量:$#(表示命令行运行时输入了多少个参数)
    访问最后一个传入参数:
        (1)${!#}
        (2)params=$#
             $params

5、$*与$@两个变量的使用
    $*:会将传入的所有参数当成一个整体的参数
    $@:会将传入的所有参数当成每一个单独的参数来处理

6、移动变量:使用shift命令,默认情况下他会将每个参数变量减一,所以变量$3的值会移动到$2,变量$2的值会移动到$1,变量$1的值则会被删除,$0不会变,主要用来遍历不太清楚传入的参数情况
    另外:我们可以给shift命令提供一个参数,来改变移动的位数,例如:shift 2
    提醒:一旦使用shift之后,被删除的参数将被丢掉并且无法恢复

7、处理简单的选项方法:
    使用case语句:
        #!/bin/bash
        while [ -n "$1" ]
        do
            case "$1" in
            -a) echo "1";;
            -b) echo "2";;
            -c) echo "3";;
            *) echo "4";;
            esac
            shift
        done
8、简单的将参数与选项分隔开来的方法:使用--来分隔

9、使用复杂的输入:例如输入的时候选项放到一起:-abc,或者一个选项后面接选项参数:-a test -b tess,平时用的不多,这些先略过,在书中的282页开始看

10、获取用户的输入:使用read命令接受从标准输入(键盘)或是另一个文件描述符的输入
    举例:
        #!/bin/bash
        echo -n "Enter you name:"
        read name
        echo "Hello $name,welcome to my program"
    参数:-p(允许直接在read命令行指定提示符)
          read -p "Enter you name:" age
          另外,可以在read后面接多个参数,输入的时候以空格分隔的将每个输入分配各个参数,分配完了,还有输入的话,将会将剩余的输入分配给最后一个参数变量
          -t(指定read命令超时选项):read -t 5
          -n1(指定read命令接受单个字符,只要你按下单个字符回答后,read命令就会接受输入并将它传给变量)
          -s(静默输入,输入的时候不显示输入字符,例如输入密码)

11、从文件中读取输入:主要使用cat与read命令结合的方式
    举例:
        #!/bin/bash
        cat test | while read line
        do
            echo "Line : $line"
        done
    说明:while循环会继续通过read命令处理文件中的行,知道read命令读取不到内容的时候,就会非零的退出码,然后结束while循环

    
 

© 著作权归作者所有

共有 人打赏支持
心中的理想乡
粉丝 18
博文 75
码字总数 101203
作品 0
深圳
程序员
私信 提问
Shell编程的究极系列(基本语法)

恩,这是由奇技淫巧组成的语言,没有之一。奇技淫巧到,他的语法出现在你无数个灵光一现时刻~ 我:蒋哥你shell好厉害! 蒋哥:恩 我:要多久啊 蒋哥:(基于Java,python,js等)要一段时间 ...

心中的理想乡
10/17
0
0
jdk8新特性之双冒号 :: 用法及详解

jdk8的新特性有很多,最亮眼的当属函数式编程的语法糖,本文主要讲解下双冒号::的用法。 概念 类名::方法名,相当于对这个方法闭包的引用,类似js中的一个function。比如: (Function在jav...

萤火的萤火
09/05
0
0
关于一次AOP拦截入参记录日志报错的梳理总结

关于一次AOP拦截入参记录日志报错的梳理总结 将服务发布到tomcat中后,观察服务的运行状态以及日志记录状况;发现有如下一个问题: 日志中记录入参并没有详细的记录下来,而是记录了一个Obj...

晨猫
11/01
0
0
Linux Shell学习简单小结(更新中……)

if-fi Result: (没有readme文件) [work shell]$ sh if_e.sh add readme ... [workshell]$ sh if_e.sh del readme ... add readme ... ===================================================......

长平狐
2013/01/06
108
0
jdk8新特性之双冒号 :: 用法及详解

jdk8的新特性有很多,最亮眼的当属函数式编程的语法糖,本文主要讲解下双冒号::的用法。 概念 类名::方法名,相当于对这个方法闭包的引用,类似js中的一个function。比如: (Function在jav...

wangbo888
09/04
0
2

没有更多内容

加载失败,请刷新页面

加载更多

Deepin 安装wireshark抓包工具

一、关于deepin和wireshark deepin目前已经发展到15.8了,开发Android毫无压力,在四个月的使用时间里,已经非常习惯了。目前想处理一些网络问题,因此尝试在deepin上安装一个抓包工具。dee...

IamOkay
25分钟前
4
0
Docker镜像仓库服务-Nexus

建立云原生集群系统,建立自己的私有Docker镜像仓库必不可少。一方面可以加快多节点部署容器镜像的下载速度,另一方面是为了安全(容器里存储有系统所有的信息、包括密码、数据库等等,切记不...

openthings
37分钟前
1
0
127.0.0.1 和 0.0.0.0 地址的区别

1. IP地址分类 1.1 IP地址表示 IP地址由两个部分组成,net-id和host-id,即网络号和主机号。 net-id:表示ip地址所在的网络号。 host-id:表示ip地址所在网络中的某个主机号码。 即: IP-a...

华山猛男
今天
21
0
解决Unknown host 'd29vzk4ow07wi7.cloudfront.net'. You may need to adjust the proxy settings in Gradle.

把 总项目 下的 build.gradle 中的 两个 jcenter() 用 maven{ url ‘http://maven.aliyun.com/nexus/content/groups/public/’} 代替。...

lanyu96
今天
6
0
基于redis的分布式锁

redisson提供了基于redis的分布式锁实现方式,本文就尝试了下锁的使用方式。Redisson同时还为分布式锁提供了异步执行的相关方法,第二节执行介绍。 一、可重入锁验证 同一个jvm里面同一线程的...

noob_chr
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部