时间:2020-02-15来源:系统城作者:电脑系统城
在《学习笔记04》中我们有提到位置参数,位置参数是用来向脚本传递参数的一种方式。还有一种方式,是read命令。
[root@c7-server ~]# read name alongdidi [root@c7-server ~]# echo $name alongdidi
read命令可以实现从STDIN中读取数据存入用户指定的变量中。
可以多变量赋值。
[root@c7-server ~]# read a b tom jerry [root@c7-server ~]# echo $a $b tom jerry
当变量数量多于值数量时,多余的变量值为空。
[root@c7-server ~]# read a b c tom jerry [root@c7-server ~]# echo $a tom [root@c7-server ~]# echo $b jerry [root@c7-server ~]# echo $c [root@c7-server ~]#
当值数量多于变量数量时,多余的值会被全部赋值给最后一个变量。
[root@c7-server ~]# read a b tom jerry mike [root@c7-server ~]# echo $a tom [root@c7-server ~]# echo $b jerry mike
可以通过-p选项实现提醒信息,使得整个用户交互更加人性化。
[root@c7-server ~]# read -p "Please enter your name:" name Please enter your name:alongdidi [root@c7-server ~]# echo $name alongdidi
如果用户不输入的话,那么read命令就会一直保持在那里,除非用户输入或者键入Ctrl+c中断。可通过-t选项指定一个超时的时长(单位:秒),这样子会使得其更加安全,类似于网站登录凭证的超时机制。
[root@c7-server ~]# read -p "Please enter your name:" name Please enter your name:^C [root@c7-server ~]# read -t 3 -p "Please enter your name:" name Please enter your name:[root@c7-server ~]# [root@c7-server ~]#
我们可以使用2个选项来对脚本进行调试。
# bash -n test.sh # bash -x test.sh
其实这两个选项在man bash中是无法找到的,因为它们不属于bash的选项,而是属于set。set的一些单字符选项(短选项)可以被bash使用,-n和-x就是其中的2个。
-n:类似于语法检测。如果脚本语法没问题的话,就不会报错。退出状态码为0。
[root@c7-server ~]# cat test.sh #!/bin/bash if id zwl &> /dev/null; then echo "User zwl exists." else echo "User zwl doesn't exists." fi [root@c7-server ~]# bash -n test.sh [root@c7-server ~]# echo $? 0
如果我们将fi注释掉,破坏了if语句的结构体。则会报错。
[root@c7-server ~]# cat test.sh #!/bin/bash if id zwl &> /dev/null; then echo "User zwl exists." else echo "User zwl doesn't exists." #fi [root@c7-server ~]# bash -n test.sh test.sh: line 7: syntax error: unexpected end of file [root@c7-server ~]# echo $? 2
但是这个语法检测本身能力其实挺弱的,比如我们将else修改掉。此时语法检测并没有报错。
因为它将原本双分支的if结构体理解成了单分支,并且将elsealongdidi理解为命令,并且不会去查询该命令是否存在。
[root@c7-server ~]# cat test.sh #!/bin/bash if id zwl &> /dev/null; then echo "User zwl exists." elsealongdidi echo "User zwl doesn't exists." fi [root@c7-server ~]# bash -n test.sh [root@c7-server ~]# echo $? 0
所以这个案例中,即便语法检测没问题,脚本在执行的时候依然会报错。
[root@c7-server ~]# bash test.sh User zwl exists. test.sh: line 4: elsealongdidi: command not found User zwl doesn't exists.
因此该语法检测,只是确保脚本是否可以执行,至于执行过程中出现的任何错误,只要不导致脚本无法继续执行,就没关系。
-x:追踪脚本的执行过程。在遇到条件结构体时可用于理解脚本执行了哪个分支。在遇到循环结构体时,也可以看明白循环了几次等。
[root@c7-server ~]# cat test.sh #!/bin/bash if id zwl &> /dev/null; then echo "User zwl exists." else echo "User zwl doesn't exists." fi [root@c7-server ~]# bash -x test.sh + id zwl + echo 'User zwl exists.' User zwl exists.
2024-07-18
Centos 7 二进制安装配置 MariaDB数据库2024-07-18
Centos7默认firewalld防火墙使用命令大全2024-07-07
四种执行python系统命令的方法常用权限linux系统内有档案有三种身份 u:拥有者 g:群组 o:其他人这些身份对于文档常用的有下面权限:r:读权限,用户可以读取文档的内容,如用cat,more查看w:写权限,用户可以编辑文档x...
2024-07-07
然而,如果我们遵循通常的 WordPress 最佳实践,这些安全问题可以避免。在本篇中,我们会向你展示如何使用 WPSeku,一个 Linux 中的 WordPress 漏洞扫描器,它可以被用来找出你安装...
2024-07-03