命令行参数

读取参数

位置参数变量是标准的数字:$0是程序名,$1是第一个参数,$2,是第二个参数,直到第九个参数$9。

特殊的变量:$#表示参数个数,$?表示最后运行的命令的结束代码(返回值)

每个参数必须用空格分开。当然如果要在参数中引用空格必须加引号。

  1. [root@node1 ljy]# more ceshi.sh
  2. #!/bin/bash
  3. sum=$[ $1 + $2 ]
  4. echo "first num is $1"
  5. echo "second num is $2"
  6. echo "sum num is $sum"
  7. [root@node1 ljy]# sh ceshi.sh 2 3
  8. first num is 2
  9. second num is 3
  10. sum num is 5

读取脚本名

$0可以获取shell在命令行启动的脚本名

  1. [root@node1 ljy]# more ceshi.sh
  2. #!/bin/bash
  3. echo "this script name is $0"
  4. [root@node1 ljy]# sh ceshi.sh
  5. this script name is ceshi.sh

如果使用另一些命令执行脚本,可能命令会与脚本名混在一起。

  1. [root@node1 ljy]# more ceshi.sh
  2. #!/bin/bash
  3. echo "this script name is $0"
  4. [root@node1 ljy]# sh /ljy/ceshi.sh
  5. this script name is /ljy/ceshi.sh
  6. [root@node1 ljy]# ./ceshi.sh
  7. this script name is ./ceshi.sh

basename命令可以返回不包含路径的脚本名

  1. [root@node1 ljy]# more ceshi.sh
  2. #!/bin/bash
  3. name=$(basename $0)
  4. echo "this script name is $name"
  5. [root@node1 ljy]# sh /ljy/ceshi.sh
  6. this script name is ceshi.sh
  7. [root@node1 ljy]# ./ceshi.sh
  8. this script name is ceshi.sh

测试参数

如果你要使用命令行参数,而不小心漏了加,可能就要报错了,

所以最好加一个测试

-n测试来检查命令行参数是否有数据。

  1. [root@node1 ljy]# more ceshi.sh
  2. #!/bin/bash
  3. if [ -n "$1" ] && [ -n "$2" ]
  4. then
  5. sum=$[ $1 + $2 ]
  6. echo "first num is $1"
  7. echo "second num is $2"
  8. echo "sum num is $sum"
  9. else
  10. echo "you should identify yourself!"
  11. fi
  12. [root@node1 ljy]# sh ceshi.sh 1 2
  13. first num is 1
  14. second num is 2
  15. sum num is 3
  16. [root@node1 ljy]# sh ceshi.sh 1
  17. you should identify yourself!

特殊参数变量

参数统计

$#含有脚本运行时携带的命令行参数的个数。可以在脚本中任何地方使用这个变量。

  1. [root@node1 ljy]# more ceshi.sh
  2. #!/bin/bash
  3. echo there were $# parameters
  4. [root@node1 ljy]# sh ceshi.sh 1 2 2 3
  5. there were 4 parameters

if-then语句常用-ne来测试命令行参数数量。

抓取所有数据

$*和$@会将命令行提供的所有参数作为一个单词保存。

$@变量会将所有参数当做一个字符串的多个独立的单词。

$*变量会将所有参数当成单个参数。

获得用户输入

基本读取

read命令从标准输入或者另一个文化描述符中接受输入,收到输入后,read命令会将数据放在一个变量里。

  1. [root@node1 ljy]# more ceshi.sh
  2. #!/bin/bash
  3. echo -n "enter your name:"
  4. read name
  5. echo hello $name
  6. [root@node1 ljy]# sh ceshi.sh
  7. enter your name:ljy
  8. hello ljy

-n选项不会在字符末尾输出换行符,允许用户紧跟其后的输入数据。

-p命令允许你输入提示符:

超时

使用read命令可能会导致程序一直等待中。

你可以使用-t选项来指定一个定时器。

  1. [root@node1 ljy]# more ceshi.sh
  2. #!/bin/bash
  3. if read -t 5 -p "enter your name:" name
  4. then
  5. echo "your name is $name"
  6. else
  7. echo
  8. echo "sorry,slow"
  9. fi
  10. [root@node1 ljy]# sh ceshi.sh
  11. enter your name:
  12. sorry,slow

隐秘读取

-s选项可以避免输入的内容显示在屏幕上

  1. [root@node1 ljy]# more ceshi.sh
  2. #!/bin/bash
  3. read -s -p "enter your name:" name
  4. echo
  5. echo "your name is $name"
  6. [root@node1 ljy]# sh ceshi.sh
  7. enter your name:
  8. your name is ljy

从文件中读取

每次调用一次read命令,都会从文件中读取一行数据,一直到没有内容的时候,read命令会退出并返回非零退出码。

  1. [root@node1 ljy]# more ceshi.sh
  2. #!/bin/bash
  3. count=1
  4. cat test.txt | while read line
  5. do
  6. echo line:$line
  7. done
  8. [root@node1 ljy]# sh ceshi.sh
  9. line:1
  10. line:2
  11. line:3
  12. line:4
  13. line:5
  14. line:

空格也作为一行显示出来了。

shell初级-----处理用户输入的更多相关文章

  1. shell编程中用户输入处理(shell 04)

    shell编程中用户输入处理1.命令行参数2.脚本运行时获取输入 命令行参数 通过空格来进行分割的位置参数 :$+position $0,$1,$2 ....$0 :程序名$1,$2,$3 ... $ ...

  2. shell中处理用户输入

    1.使用命令行参数 在shell执行的时候命令行中输入的所有参数可以赋值给一些特殊变量,这些变量成为位置变量参数. 包括: $0返回脚本名称.$1为第一个参数.$2为第二个参数 ...$9第九个参数 ...

  3. Linux&shell之处理用户输入

    写在前面:案例.常用.归类.解释说明.(By Jim) 命令行参数$1为第一个参数,$2为第二个参数,依次类推...示例: #!/bin/bash # using one command line p ...

  4. Linux - 简明Shell编程13 - 用户输入(UserInput)

    脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 1 - arguments #!/bin/bash i ...

  5. Shell - 简明Shell入门13 - 用户输入(UserInput)

    示例脚本及注释 1 - arguments #!/bin/bash if [ -n "$1" ];then # 验证参数是否传入 echo "The first para ...

  6. Shell 脚本处理用户输入

    传递参数 跟踪参数 移动变量 处理选项 将选项标准化 获得用户的输入 bash shell提供了一些不同的方法来从用户处获取数据,包括命令行参数(添加在命令后数据),命令行选项(可以修改命令行为的单个 ...

  7. Shell 语法之用户输入

    bash shell 提供了一些不同的方法从用户处获取数据,这些方法包括命令行参数.命令行选项和直接读取键盘输入. 命令行参数 bash shell 将在命令行中输入的所有参数赋值给一些特殊变量,称为 ...

  8. Linux shell脚本读取用户输入的参数

    新建一个test.sh文件 #!/bin/sh echo "1 : For Test" echo "2 : For nohup &" whiletrue ...

  9. shell获取用户输入

    主题: 再学shell之获取用户输入echo -n(不换行)和read命令-p(提示语句) -n(字符个数) -t(等待时间) -s(不回显) 和“读文件”深入学习 1.基本读取read命令接收标准输 ...

随机推荐

  1. selenium入门学习

    在写爬虫的学习过程中,经常会有一些动态加载,有些是可以动过接口直接获取到,但是实在没办法,所以学习下selenium. 首先百度一下: Selenium [1]  是一个用于Web应用程序测试的工具. ...

  2. 跑满带宽的一款百度网盘下载工具 : PanDownload

    下载地址 : 点击进入 官网上面也有介绍使用.在这里,我再说一下 下载之后,解压,运行,登录, 登录好之后,准备进行设置 重要:下载情况分以下三部分 下载内容 < 300M,选择`打包下载`,只 ...

  3. 黑马java课程视频java学习视频

    资料获取方式,关注公总号RaoRao1994,查看往期精彩-所有文章,即可获取资源下载链接 更多资源获取,请关注公总号RaoRao1994

  4. JAVA项目中的常用的异常处理情况总结

    可能遇见的异常或错误: 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的.例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略. 运行时异常: ...

  5. MonkeyRunner的简介与综合实践

    官方介绍: Monkeyrunner工具提供了一个API,用于编写可从Android代码外部控制Android设备或模拟器的程序.使用monkeyrunner,您可以编写一个Python程序来安装An ...

  6. 〇三——css常规使用

    我们在前面已经学习了常用的html基础,就可以画出一个最直接的‘裸体’ ,那么这么画出来的比较简陋,那怎么能让他变得更漂亮呢?这里就引出今天要讲的——css 我们先看看怎么把页面加上修饰的效果 < ...

  7. 洛谷P3402 可持久化并查集

    n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 说是可持久化并查集,实际上是 ...

  8. grunt-css-sprite css 代码中的切片合并

    安装插件:npm install grunt-css-sprite --save-dev grunt-css-sprite主要功能:1.对 css 文件进行处理,收集切片序列,生成雪碧图2.在原css ...

  9. Gym-10071A-Queries(树状数组)

    链接: https://vjudge.net/problem/Gym-100741A 题意: Mathematicians are interesting (sometimes, I would sa ...

  10. js 引号 转义字符 json字符串

    element_obj.NewTitle.value = json_obj.NewTitle.replace(/\"/g, "\""); model.NewTi ...