Bash Shell提供了一些不同的方法来从用户处获得数据,包括命令行参数(添加在命令后的数据)、命令行选型(可修改命令行为单个字母)以及直接从键盘读取输入的能力。

1.命令行参数

向Shell脚本传递数据的基本方法时使用命令行参数。命令行参数允许在运行脚本时向命令行添加数据。

$ ./addem 10 30

本例传递了两个命令行参数(10和30)。

1.2读取参数

Bash shell会将一些称为位置参数的特殊变量分配给输入到命令行中的所有参数。

这也包括shell所执行的脚本名称。位置参数变量是标准的数字:

位置参数 参数
$0 程序员
$1 第一个参数
$2 第二个参数

依次类推…直到第九个参数$9。

命令行参数之间,必须用空格分开。

每个参数的都是用空格分隔的,所以shell会将空格当成两个值的分隔符。要在参数中包含空格,必须要用引号(单引号或者双引号都可)。

1.3 读取脚本名

使用参数$0获取shell在命令行启动的脚本名。

当传给$0变量的实际字符串不仅仅是脚本名,而是完整的脚本路径时,变量$0就会使用整个路径。

$ bash /home/Christine/test5.sh

通过使用basename命令,可以返回不包含路径的脚本名。

name=$(basename $0)

1.4测试参数

在shell脚本中使用命令行参数时要注意,如果脚本不加参数运行,可能会出问题。

$ ./addem 2

当脚本认为参数变量中会有数据而实际上没有时,脚本很有可能会产生错误消息。

在使用参数前一定要检查其中是否存在数据。

if [ -n "$1"]
then
echo Hello $1
else
echo "no."
fi

2.特殊参数变量

2.1 参数统计

特殊变量$#含有脚本运行时携带的命令行参数的个数。可以在脚本中任何地方使用这个特殊变量,就跟普通变量一样。

$ cat test8.sh
#!/bin/bash
echo There were $# parameters supplied. $ ./test8.sh
There were 0 parameters supplied.
$ cat test8.sh 1 2 3 4 5
#!/bin/bash
echo There were $# parameters supplied. $ ./test8.sh
There were 5 parameters supplied.

使用参数前测试参数的总数。

$ cat test9.sh
#!/bin/bash
if [ $# -ne 2]
then
echo
echo Usage : test9.sh a b
echo
else
total=$[ $1 + $2 ]
echo
echo the total is $total
fi

2.2抓取所有的数据

$*和&@变量可以用来轻松访问所有的参数。这两个变量都能够在单个变量中存储所有的命令行参数。

∗变量会将命令行上提供的所有参数当作一个单词保存。这个单词包含了命令行中出现的每一个参数值。基本上*变量会将命令行上提供的所有参数当作一个单词保存。这个单词包含了命令行中出现的每一个参数值。基本上∗变量会将命令行上提供的所有参数当作一个单词保存。这个单词包含了命令行中出现的每一个参数值。基本上*变量会将这些参数视为一个整体,而不是多个个体。

$@变量会将命令行上提供的所有参数当作同一字符串中的多个独立的单词。这样就能够遍历所有的参数值,得到每个参数。通过使用for命令完成。

3.移动变量

bash shell的shift命令能够用来操作命令行参数。

shift命令会根据它们的相对位置来移动命令行参数。

在使用shift命令时,默认情况下它会被每个参数变量向左移动一个位置。所以,变量$3的值会移到$2中,变量$2的值会移到$1,而变量$1的值会被删除。(变量$0的值,即程序员,不会改变)

4.处理选项

选项是跟在单破折线后面的单个字母,他能改变命令的行为。

5.选项标准化

6.获得用户输入

6.1 基本的读取

read命令从标准输入(键盘)或另一个文件描述符中接受输入。在收到输入后,read命令会将数据放进一个变量。

$ cat test.sh
#!/bin/bash
echo -n "Enter your name"
read name
echo "Hello $name"

6.2超时

使用read命令,脚本可能会一直等待脚本用户的输入。如果不管是否有数据输入,脚本都必须继续执行,可以使用-t选项来指定一个计时器。-t选项指定了read命令等待输入的秒数。当计时器过期后,read命令会返回一个非零退出状态码。

6.3隐藏方式读取

-s 选项可以避免在read命令中输入的数据出现在显示器上。

6.4从文件中读取

可以用read命令来读取Linux系统上文件里保存的数据。每次调用read命令,都会从文件中读取一行文本。

当文件中没有内容时,read命令会退出并返回非零退出状态码。

通过使用cat命令,将文件中的数据传给read命令。通过管道直接传给read命令的while命令。

Linux-处理用户输入的更多相关文章

  1. linux bash 用户输入yes or no.

    脚本为script2 vim 打开脚本 内容是 对用户的键盘输入反应 sh 运行脚本,一次输入的是y ,一次输入的是n.

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

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

  3. 《Linux命令行与shell脚本编程大全》第十四章 处理用户输入

    有时还会需要脚本能够与使用者交互.bash shell提供了一些不同的方法来从用户处获得数据, 包括命令行参数,命令行选项,以及直接从键盘读取输入的能力. 14.1 命令行参数 就是添加在命令后的数据 ...

  4. 自学Linux Shell13.3-获得用户输入(read命令)

    Bash shell提供了一些不同的方法来从用户处获得数据,包括以下3中方法: 命令行参数(添加在名利后面的数据) 命令行选项(可修改命令行为的单个字母)主要getopt.getopts命令 直接从键 ...

  5. linux shell获取用户输入

    一.获取用户输入1.基本读取read命令接收标准输入的输入,或其它文件描述符的输入.得到输入后,read命令将数据输入放入一个标准变量中.[root@rac2 ~]# cat t8.sh #!/bin ...

  6. Linux 新建用户、用户组,给用户分配权限(chown、useradd、groupadd、userdel、usermod、passwd、groupdel)

    Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面可以帮助系统管理员对使用系统的用户进行 ...

  7. Linux创建用户(转)

    这篇文章总结的太好了,让我没动力新写一篇了,啊哈哈哈哈. 源自:http://www.cnblogs.com/ylan2009/articles/2321177.html Linux 系统是一个多用户 ...

  8. Linux给用户添加sudo权限

    一.linux给用户添加sudo权限: 有时候,linux下面运行sudo命令,会提示类似: xxxis not in the sudoers file.  This incident will be ...

  9. Linux跨用户copy文件

    foo用户home目录下有一文件file.txt,要将其copy至bar用户的home目录.Linux对用户home目录有严格的权限限制,非owner用户或者同group用户无权限读写,除非是root ...

  10. linux 下用户管理

    linux 下用户管理 一.用户的分类 1.超级用户:root UID=0 2.系统用户:不需要登录系统,对应用程序服务,主要维护系统的正常运行:UID = 1 ~ 499(RHEL7 = 1 ~ 9 ...

随机推荐

  1. windows使用sdelete安全的删除文件

    SDelete是一款来自于微软Sysinternals[1]的应用.使用SDelete可以安全的删除现有文件,以及安全地擦除磁盘的未分配部分中存在的数据(包括已经删除或加密的文件).SDelete使用 ...

  2. 数据库分库分表容量划分建议参考阿里云DRDS原则

    做分库分表的时候 一直想知道分库分表容量的最优规则有什么好的建议,以下是参考阿里云 DRDS 分库分表的规则,还是有一定的参考意义 .

  3. 今天写了一个SSM小项目,运行之后,前端页面的CSS、js样式显示不出来,具体操作如下:

    因为SSM中我们设置了拦截器,拦截器会拦截CSS和JS,所有样式渲染不出来,在Web.xml中写上 1 <servlet-mapping> 2 <servlet-name>de ...

  4. android 百度地图 团队开发及正式apk发布

    百度地图开发关键是获取正确的API Key,  百度官网写的只是在你本地的机器能运行 你把AndroidManifest.xml(这里是最新的v2_4_1,API Key配置在这里) svn 提交后  ...

  5. NOIP初赛篇——09原码、反码和补码

    一.数的原码.补码和反码表示 机器数和真值 ​ 在计算机中,表示数值的数字符号只有0和1两个数码,我们规定最高位为符号位,并用0表示正符号,用1表示负符号.这样,机器中的数值和符号全"数码化 ...

  6. Docker 镜像仓库使用(六)

    阿里云docker 容器镜像服务: www.aliyun.com 1 服务开通 (开通的时候要求创建密码请牢记此密码) 2 创建命名空间 3 创建镜像仓库 4 linux 客户端登录 登录: dock ...

  7. Centos7 Nginx+PHP7 配置

    Centos7 Nginx+PHP7 配置 内容: 源码编译安装Nginx和PHP 配置PHP和Nginx,实现Nginx转发到PHP处理 测试 设置Nginx.PHP开机自启 安装的版本: Ngin ...

  8. 【Shell】使用awk sed获取一行内容的两个值

    突然有需求需要一个脚本,同时获取到每一行数据的两个值,下面做了一个例子模板,仅供记录参考 cat test.txt  id=1,name=zclinux1 id=2,name=zclinux2 id= ...

  9. 【Nginx】配置nginx图片服务器

    想通过nginx来访问服务器上的图片 可以搭建一个nginx图片服务器. 做法如下: 先安装nginx,这里直接用yum来进行安装的 安装方法如下: https://blog.csdn.net/iml ...

  10. 【Linux】sudo配置文件讲解

    一.sudo执行命令的流程 将当前用户切换到超级用户下,或切换到指定的用户下, 然后以超级用户或其指定切换到的用户身份执行命令,执行完成后,直接退回到当前用户. 具体工作过程如下: 当用户执行sudo ...