命令行参数

读取参数

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

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

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

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

读取脚本名

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

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

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

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

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

[root@node1 ljy]# more ceshi.sh
#!/bin/bash
name=$(basename $0)
echo "this script name is $name"
[root@node1 ljy]# sh /ljy/ceshi.sh
this script name is ceshi.sh
[root@node1 ljy]# ./ceshi.sh
this script name is ceshi.sh

测试参数

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

所以最好加一个测试

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

[root@node1 ljy]# more ceshi.sh
#!/bin/bash
if [ -n "$1" ] && [ -n "$2" ]
then
sum=$[ $1 + $2 ]
echo "first num is $1"
echo "second num is $2"
echo "sum num is $sum"
else
echo "you should identify yourself!"
fi
[root@node1 ljy]# sh ceshi.sh 1 2
first num is 1
second num is 2
sum num is 3
[root@node1 ljy]# sh ceshi.sh 1
you should identify yourself!

特殊参数变量

参数统计

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

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

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

抓取所有数据

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

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

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

获得用户输入

基本读取

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

[root@node1 ljy]# more ceshi.sh
#!/bin/bash
echo -n "enter your name:"
read name
echo hello $name
[root@node1 ljy]# sh ceshi.sh
enter your name:ljy
hello ljy

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

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

超时

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

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

[root@node1 ljy]# more ceshi.sh
#!/bin/bash
if read -t 5 -p "enter your name:" name
then
echo "your name is $name"
else
echo
echo "sorry,slow"
fi
[root@node1 ljy]# sh ceshi.sh
enter your name:
sorry,slow

隐秘读取

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

[root@node1 ljy]# more ceshi.sh
#!/bin/bash
read -s -p "enter your name:" name
echo
echo "your name is $name"
[root@node1 ljy]# sh ceshi.sh
enter your name:
your name is ljy

从文件中读取

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

[root@node1 ljy]# more ceshi.sh
#!/bin/bash
count=1
cat test.txt | while read line
do
echo line:$line
done
[root@node1 ljy]# sh ceshi.sh
line:1
line:2
line:3
line:4
line:5
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. react 不同环境配置不同域名

    npm eject 先将配置文件暴露出来 将scripts中的build文件复制一份,改名为你需要的名字 将其中的 process.env.NODE_ENV 赋值为你需要的环境 在package.js ...

  2. LINUX任意精度计算器BC用法

    [用途说明] Bash内置了对整数四则运算的支持,但是并不支持浮点运算,而bc命令可以很方便的进行浮点运算,当然整数运算也不再话下.手册页上说bc是An arbitrary precision cal ...

  3. 4.(基础)tornado应用安全与认证

    这一节我们介绍应用安全与认证,其实中间省略了一个数据库.对于tornado来说,读取数据库的数据,性能的瓶颈还是在数据库上面.关于数据库,我在<>中介绍了sqlalchemy,这是一个工业 ...

  4. 如何避免学习linux必然会遇到的几个问题

    相信在看这篇文章的都是对linux系统所迷的志同道合的人,不管你是刚开始学,还是已经接触过一些linux的知识,下面的问题是你在学习linux所必须遇到的,若是没有的话那我只能说大神我服你了.下面我就 ...

  5. uft 测试工具使用

      选择 uft 自带小飞机 cs测试 开始设置 启动插件管理  选择测试 软件类型 cs  bs   新建录制项目     各个功能按钮     添加测试程序工作路径     进入录制   保存录制 ...

  6. WebSocket是什么原理,为什么可以实现持久连接

    本文摘抄自知乎,原文标题:WebSocket 是什么原理?为什么可以实现持久连接? Websocket只是协议而已. 一.WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化, ...

  7. JavaScript This 的六道坎

    鉴于this风骚的运作方式,对this的理解是永不过时的话题,本文试图通过将其大卸六块来钉住这个磨人的妖精. 首先 this is all about context. this说白了就是找大佬,找拥 ...

  8. windows server没有这台电脑图标

    rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0

  9. 微擎后台进行GET提交

    微擎form表单进行GET提交时,要传递 name 分别为 c , a , m , do 的值 例如: <form action="{php echo $this->create ...

  10. HDU - 6396 Swordsman (单调性+贪心)

    题意:有n个怪物和k种属性,当且仅当你的每种属性都大于等于怪物的属性才可以击杀它,且击杀怪物可以提升你一定的属性值.求可击杀怪物的最大数量以最终的属性值. 这不就是银行家算法里的安全性检验么? 本题的 ...