- 浏览: 2188402 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (682)
- 软件思想 (7)
- Lucene(修真篇) (17)
- Lucene(仙界篇) (20)
- Lucene(神界篇) (11)
- Solr (48)
- Hadoop (77)
- Spark (38)
- Hbase (26)
- Hive (19)
- Pig (25)
- ELK (64)
- Zookeeper (12)
- JAVA (119)
- Linux (59)
- 多线程 (8)
- Nutch (5)
- JAVA EE (21)
- Oracle (7)
- Python (32)
- Xml (5)
- Gson (1)
- Cygwin (1)
- JavaScript (4)
- MySQL (9)
- Lucene/Solr(转) (5)
- 缓存 (2)
- Github/Git (1)
- 开源爬虫 (1)
- Hadoop运维 (7)
- shell命令 (9)
- 生活感悟 (42)
- shell编程 (23)
- Scala (11)
- MongoDB (3)
- docker (2)
- Nodejs (3)
- Neo4j (5)
- storm (3)
- opencv (1)
最新评论
-
qindongliang1922:
粟谷_sugu 写道不太理解“分词字段存储docvalue是没 ...
浅谈Lucene中的DocValues -
粟谷_sugu:
不太理解“分词字段存储docvalue是没有意义的”,这句话, ...
浅谈Lucene中的DocValues -
yin_bp:
高性能elasticsearch ORM开发库使用文档http ...
为什么说Elasticsearch搜索是近实时的? -
hackWang:
请问博主,有用solr做电商的搜索项目?
Solr中Group和Facet的用法 -
章司nana:
遇到的问题同楼上 为什么会返回null
Lucene4.3开发之第八步之渡劫初期(八)
上篇介绍了for循环命令的使用,本篇的shell学习,我们来看下如何在shell环境下处理用户的输入,我们可以向运行的shell从外部传入一些参数,通常情况下
$0是程序名
$1是第一个参数
$2是第二个参数
依次类推知道第9个参数$9
第9个之后需要${10}以此,至无限的
如果穿的是带空格的字符串,记得用双引号引起来即可。
多于10个参数的我们需要使用大括号来引用
$0可以获取程序名
如果只想要程序名,而不用带路径的话,可以使用basename命令来获取
我们可以通过-n来测试参数中是否有数据:
如何知道参数总个数呢? s#命令可以满足我们
那么如何获取参数里面最后一个参数呢?
命令: ${!#}
如何获取所有的数据?
$*可以奖所有参数作为一个字符串显示出来
$@可以把所有参数当成一个数组来执行
shift命令,可以来移位参数:
处理选项:
上面程序,充分利用了移位技术,来保证每个参数只会被处理一遍。
如何使选项与参数分离呢,我们可以使用--命令来做个小程序测试:
下面看一个getopts命令,可以帮助我们处理选项与参数的关系:
$OPTARG 保存环境变量的值 $OPTID 保存了参数列表里面的位置
如果遇到了未知的参数,会以问号代替输出
下面我们来看下如何在shell里面获取用户输入,就像我们在JAVA中使用Scanner对象获取键盘输入一样:
read命令会从键盘读入或从一个文件描述符里面读入数据,然后放进一个变量里面
我们还可以直接使用-p命令读入一行数据:
你可以在read时不指定变量名,系统默认会放在$REPLY
除此之外,我们还可以对输入,设置个超时时间,如果一段时间内没人输入,就结束等待状态,程序退出!
-n后面的数字1,代码可以接受几个字符,而不必按回车键
下面看下隐藏方式读取数据:
最后看下如何从一个文件里面按行读取数据:
$0是程序名
$1是第一个参数
$2是第二个参数
依次类推知道第9个参数$9
第9个之后需要${10}以此,至无限的
[search@h1 812]$ cat a.sh echo "你输入的第一个数是: $1" [search@h1 812]$ sh a.sh 2 你输入的第一个数是: 2 [search@h1 812]$
[search@h1 812]$ cat a.sh echo "你输入的第1个数是: $1" echo "你输入的第2个数是: $2" echo "你输入的第3个数是: $3" [search@h1 812]$ sh a.sh 4 5 898 你输入的第1个数是: 4 你输入的第2个数是: 5 你输入的第3个数是: 898 [search@h1 812]$
如果穿的是带空格的字符串,记得用双引号引起来即可。
多于10个参数的我们需要使用大括号来引用
[search@h1 812]$ cat aa.sh echo "第10个参数: $10" echo "第11个参数: $11" echo "第10个参数大括号: ${10}" [search@h1 812]$ sh aa.sh 1 2 3 4 5 6 7 8 9 a 11 12 第10个参数: 10 第11个参数: 11 第10个参数大括号: a [search@h1 812]$
$0可以获取程序名
[search@h1 812]$ cd [search@h1 ~]$ sh 812/cc.sh 程序名是: 812/cc.sh [search@h1 ~]$ cd 812/ [search@h1 812]$ chmod u+x cc.sh [search@h1 812]$ ./cc.sh 程序名是: ./cc.sh [search@h1 812]$
如果只想要程序名,而不用带路径的话,可以使用basename命令来获取
[search@h1 ~]$ cat 812/cc.sh echo "程序名是: $0" name=`basename $0` echo "我永远只显示程序名: $name" date [search@h1 ~]$ sh 812/cc.sh 程序名是: 812/cc.sh 我永远只显示程序名: cc.sh 2014年 08月 13日 星期三 03:54:57 CST [search@h1 ~]$
我们可以通过-n来测试参数中是否有数据:
[search@h1 812]$ cat b.sh if [ -n "$1" ] ; then echo "有数据: $1" else echo "对不起,请输入数据: $1" fi [search@h1 812]$ sh b.sh 对不起,请输入数据: [search@h1 812]$ sh b.sh 你好 有数据: 你好 [search@h1 812]$
如何知道参数总个数呢? s#命令可以满足我们
[search@h1 812]$ cat bb.sh echo "你输入总个数: $#" [search@h1 812]$ sh bb.sh 1 2 a b cc 你输入总个数: 5 [search@h1 812]$ sh bb.sh 1 2 a b 你输入总个数: 4 [search@h1 812]$ sh bb.sh 你输入总个数: 0 [search@h1 812]$
那么如何获取参数里面最后一个参数呢?
命令: ${!#}
[search@h1 812]$ cat bb.sh echo "最后一个参数是: ${!#} " [search@h1 812]$ sh bb.sh 最后一个参数是: bb.sh [search@h1 812]$ sh bb.sh 2 a z 最后一个参数是: z [search@h1 812]$
如何获取所有的数据?
$*可以奖所有参数作为一个字符串显示出来
$@可以把所有参数当成一个数组来执行
[search@h1 812]$ cat d.sh echo "\$* 所有的: $*" echo "\$@ 所有的: $@" #两者的区别 for var in "$*" do echo "\$*的遍历是: $var" done echo "=============================================" for var in "$@" do echo "\$@的遍历是: $var" done [search@h1 812]$ sh d.sh 1 2 a b 100 $* 所有的: 1 2 a b 100 $@ 所有的: 1 2 a b 100 $*的遍历是: 1 2 a b 100 ============================================= $@的遍历是: 1 $@的遍历是: 2 $@的遍历是: a $@的遍历是: b $@的遍历是: 100 [search@h1 812]$
shift命令,可以来移位参数:
[search@h1 812]$ cat dd.sh echo "所有的参数是: $*" shift 2 echo "移位后的参数是: $*" [search@h1 812]$ sh dd.sh 1 3 9 00 所有的参数是: 1 3 9 00 移位后的参数是: 9 00 [search@h1 812]$
处理选项:
[search@h1 812]$ cat e.sh while [ -n "$1" ] do case "$1" in -a) echo "find the -a option" ;; -b) echo "find the -b option" ;; -c) echo "find the -c option" ;; *) echo "$1 is not an option" ;; esac shift done [search@h1 812]$ sh e.sh -a -b -c -d find the -a option find the -b option find the -c option -d is not an option [search@h1 812]$ sh e.sh -a find the -a option
上面程序,充分利用了移位技术,来保证每个参数只会被处理一遍。
如何使选项与参数分离呢,我们可以使用--命令来做个小程序测试:
[search@h1 812]$ cat s.sh while [ -n "$1" ] do case "$1" in -a) echo "a exist";; -b) echo "b exist";; -c) echo "c exist";; -d) echo "d exist";; --) shift break;; *) echo "$1 is not an option" esac shift done for var in "$@" do echo "剩余的参数是: $var" done [search@h1 812]$ sh s.sh -a -b -e -- 1 2 3 a exist b exist -e is not an option 剩余的参数是: 1 剩余的参数是: 2 剩余的参数是: 3 [search@h1 812]$
下面看一个getopts命令,可以帮助我们处理选项与参数的关系:
$OPTARG 保存环境变量的值 $OPTID 保存了参数列表里面的位置
如果遇到了未知的参数,会以问号代替输出
[search@h1 812]$ cat g.sh while getopts :ab:c opt do case "$opt" in a) echo "-a exist";; b) echo "-b exist, with value $OPTARG";; c) echo "-c exist";; *) echo "unknow option $opt";; esac done [search@h1 812]$ sh g.sh -ab test1 -d -a exist -b exist, with value test1 unknow option ? [search@h1 812]$
下面我们来看下如何在shell里面获取用户输入,就像我们在JAVA中使用Scanner对象获取键盘输入一样:
read命令会从键盘读入或从一个文件描述符里面读入数据,然后放进一个变量里面
[search@h1 812]$ cat r.sh echo -n "请输入你的名字:" read name echo "Hello $name " [search@h1 812]$ sh r.sh 请输入你的名字:jim Hello jim [search@h1 812]$ sh r.sh 请输入你的名字:dongliang Hello dongliang [search@h1 812]$
我们还可以直接使用-p命令读入一行数据:
[search@h1 812]$ cat n.sh read -p "请输入你的年龄:" age echo "你的年龄是: $age" [search@h1 812]$ sh n.sh 请输入你的年龄:23 你的年龄是: 23 [search@h1 812]$ sh n.sh 请输入你的年龄:100 你的年龄是: 100 [search@h1 812]$
你可以在read时不指定变量名,系统默认会放在$REPLY
[search@h1 812]$ cat m.sh read -p "input name: " echo "你输入的是: $REPLY" [search@h1 812]$ sh m.sh input name: solr 你输入的是: solr [search@h1 812]$
除此之外,我们还可以对输入,设置个超时时间,如果一段时间内没人输入,就结束等待状态,程序退出!
[search@h1 812]$ cat q.sh if read -t 5 -p "请在5秒内输入名字:" name then echo "你好 $name" else echo "对不起,你输入太慢了!" fi [search@h1 812]$ sh q.sh 请在5秒内输入名字:a 你好 a [search@h1 812]$ sh q.sh 请在5秒内输入名字:对不起,你输入太慢了! [search@h1 812]$
[search@h1 812]$ cat w.sh read -n1 -p "yes or no?" var case $var in Y | y) echo "contine...";; N | n) echo "OK. bye bye" exit ;; esac echo `date` [search@h1 812]$ sh w.sh yes or no?ycontine... 2014年 08月 13日 星期三 05:37:10 CST [search@h1 812]$ sh w.sh yes or no?nOK. bye bye [search@h1 812]$ sh w.sh yes or no?z2014年 08月 13日 星期三 05:37:20 CST [search@h1 812]$
-n后面的数字1,代码可以接受几个字符,而不必按回车键
下面看下隐藏方式读取数据:
[search@h1 812]$ cat p.sh read -s -p "请输入密码: " pwwd echo "你的密码是: $pwwd" [search@h1 812]$ sh p.sh 请输入密码: 你的密码是: abc [search@h1 812]$ sh p.sh 请输入密码: 你的密码是: hahahah [search@h1 812]$
最后看下如何从一个文件里面按行读取数据:
[search@h1 812]$ cat ccc.sh cat abc.txt | while read line do echo "数据: $line" done echo `date` [search@h1 812]$ sh ccc.sh 数据: 数据: 数据: a 数据: b 数据: cc 数据: dd the 数据: ee 2014年 08月 13日 星期三 05:45:23 CST [search@h1 812]$ cat abc.txt a b cc dd the ee [search@h1 812]$
发表评论
-
备忘几个有用的shell脚本
2015-04-07 21:59 1511(1)在shell下,操作hadoop目录,批量命名或删除, ... -
shell脚本杂记(五)
2014-09-22 19:48 20291,找出多个文件所占用的磁盘空间 du f1 f2 [roo ... -
shell脚本杂记(四)
2014-09-19 20:03 17181,wget是一个用于文件 ... -
shell自动化部署批量建立用户和批量SSH配置
2014-09-18 18:29 3633在linux下面,shell脚本熟练使用,有时候可以帮助我们解 ... -
shell自动化部署神器expect
2014-09-17 21:08 4705Shell可以实现简单的控制流功能,如:循环、判断等。但是对于 ... -
shell脚本杂记(三)
2014-09-16 19:58 16231,我们先来熟悉下正则表达式一些字符含义的基础 ^行起始标记 ... -
shell脚本杂记(二)
2014-09-15 21:25 20291,求两个文件的交集comm a.txt b.txt -1 - ... -
shell脚本杂记(一)
2014-09-12 21:50 20441,登陆系统时,$代表 ... -
跟散仙学shell编程(十五)
2014-08-27 21:24 1848上篇文章,散仙简单介绍了,如何在Linux下以shell脚本的 ... -
跟散仙学shell编程(十四)
2014-08-26 20:59 1940上篇散仙简单介绍了linu ... -
跟散仙学shell编程(十三)
2014-08-25 20:02 1331上篇散仙主要了讲述了gawk进阶的一些用法,本篇我们来了解下载 ... -
跟散仙学shell编程(十二)
2014-08-22 21:27 1590上篇文章散仙写了关于sed进阶,本篇我们来看下在linux中另 ... -
跟散仙学shell编程(十一)
2014-08-21 21:45 1667上篇散仙写了关于shell里面正则的基础知识,本篇我们来特意学 ... -
跟散仙学shell编程(十)
2014-08-20 21:22 1327上篇文章,散仙简单介绍了在linux中,使用sed和gawk编 ... -
跟散仙学shell编程(九)
2014-08-19 21:49 1718上篇散仙说了如何在linux里面构建更好的交互式shell,本 ... -
跟散仙学shell编程(八)
2014-08-18 21:50 1640上篇散仙说了linux里面函数的使用,本篇我们来看下如何在sh ... -
跟散仙学shell编程(七)
2014-08-15 21:46 1812上篇散仙在文章里描述了如何处理linux信号和脚本控制,本节我 ... -
跟散仙学shell编程(六)
2014-08-14 21:53 2108上篇介绍了linux里面的处理数据的方式,本篇散仙来说下,如何 ... -
跟散仙学shell编程(五)
2014-08-13 21:41 1675上一篇写的是处理用户输入,本篇散仙要写的是linux里面的标准 ... -
跟散仙学shell编程(三)
2014-08-11 21:38 1751散仙在上一篇文章里写了关于如何使用if-else以及case等 ...
相关推荐
《跟老男孩学Linux运维:Shell编程实战》第四部分为第14章~第16章,着重讲解Shell脚本开发规范与编码习惯、Shell脚本的调试知识和技巧、Shell脚本开发环境的配置调整和优化等。《跟老男孩学Linux运维:Shell编程实战...
跟老男孩学Linux运维:Shell编程实战 PDF跟老男孩学Linux运维:Shell编程实战 PDF
资深运维架构实战专家及教育培训界*专家十多年的运维实战经验总结,全面系统地讲解运维工作中Shell编程所需的知识点和Shell编程的各种企业级案例。
《LINUX与UNIX Shell编程指南》是一本专为初学者设计的shell编程教程,它深入浅出地介绍了在Linux和UNIX系统中如何使用Shell进行高效自动化任务处理。Shell编程是Linux和UNIX系统中的核心技术,它允许用户通过命令行...
Windows Shell 编程.pdf 看过一些对windows 外壳的扩展程序,在使用上一般都是直接利用windows的外壳API做一些工作,因为外壳操作需要一些比较专业的知识,因此,大部分编程人员特别是使用集成编程环境的程序人员对...
Shell编程是Linux/Unix系统中不可或缺的一部分,它是一种命令行解释器,允许用户与操作系统进行交互,执行系统命令,以及编写脚本自动化任务。在本文中,我们将深入探讨Shell编程的基础知识,包括基本命令、变量、...
Shell 编程中文手册 本手册涵盖了 Shell 编程的基础知识,包括 Shell 概述、Shell 解析器、Shell 脚本入门、Shell 中的变量等。 Shell 概述 Shell 是一种命令行接口,允许用户与操作系统进行交互。学习 Shell ...
《shell编程入门教程》、《shell脚本专家指南》以及《UNIX.shell编程24小时教程》会提供详尽的实例和练习,帮助你巩固所学并深化理解。 总之,Shell编程是Linux/Unix环境中不可或缺的技能,它能够提高工作效率,...
shell编程题目练习,练习基本的shell编程,学习脚本语言,提高效率
跟老男孩学Linux运维:Shell编程实战 完整版 pdf
"Linux与UNIX Shell编程指南" Linux与UNIX Shell编程指南是计算机科学领域中一本经典的指南手册,旨在帮助读者快速掌握Linux与UNIX操作系统下的shell编程技术。下面是从该书中生成的相关知识点: 1. Shell概述 ...
《Windows Shell 编程指南与实例》是一本深入探讨Windows操作系统壳层编程技术的专业书籍。在Windows系统中,Shell指的是用户界面,它为用户提供与操作系统交互的环境,包括桌面、开始菜单、快捷方式等。Shell编程则...
13Linux下Shell编程之While case演练 14Linux下Shell编程之While case演练 15Shell编程之函数及脚本案例讲解 16Shell编程之函数及脚本案例讲解 17Linux下Shell编程FIND、SED命令实战 18Linux下Shell编程FIND、SED...
这是一套完整的Unix培训教材,包括Unix常用命令及SHELL编程基础与高级技巧,PDF格式,共30个文件。另有2个Word文档。包内文件清单如下: 01_Shell-文件安全与权限.PDF 02_Shell-使用find和xargs.PDF 03_Shell-...
6本pdf及chm的shell 编程的书 6本pdf及chm的shell 编程的书 6本pdf及chm的shell 编程的书 6本pdf及chm的shell 编程的书 6本pdf及chm的shell 编程的书
shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人...
**Shell编程介绍** Shell编程是Linux/Unix操作系统中的一种脚本语言,用于自动化日常任务,交互式地控制操作系统,以及实现系统级别的程序间交互。它提供了命令行接口(CLI)来执行各种系统命令,使用户能够高效地...
Shell学习的好帮手Shell学习的好帮手Shell学习的好帮手Shell学习的好帮手Shell学习的好帮手
Linux Shell 编程基础教程 本资源为 Linux Shell 编程基础教程,涵盖了 Linux Shell 编程的基础知识,包括语法基本介绍、变量、环境变量、Shell 命令和流程控制等。 一、语法基本介绍 在 Linux Shell 编程中,...