Linux Shell
使用 echo命令的选项
关于各种命令的使用,可以使用man 命令来查看命令的详细用法介绍。例如,我想看下 echo 的用法和各种选项。可以执行 man echo。执行结果如下:
echo
如果单独执行 echo 命令,就会打印出一个空白行。
默认情况下,echo 都会换行,如果不想换行的话,可以使用下面两种方式的一种。
echo -n "Which directory do you want to use? "
echo -e "Which directory do you want to use? \c"
使用 read 命令
如果我们需要读入用户输入的参数时,可以使用 read 命令,当然还可以从文件系统等读入信息。
我们建立一个新的脚本文件 hello3.sh。
#!/bin/bash
echo -n "Hello I $(basename $0) may I ask your name: "
read
echo "Hello $REPLY"
exit 0
执行此脚本时,首先提示需要输入,然后输入的内容,REPLY当没有给read提供参数时设置,最后打印出来。
执行结果为:
hello3.sh
优化 read 提示的脚本
在前面的例子中,我们使用了echo -n的方式来阻止信息换行,其实 read 命令也带了一个选项来实现相同的功能:
read -p "Enter your name: " name
上面的脚本中,我们定义了一个变量name用来保存输入的内容,如果不定义变量的话,输入的内容会保存在REPLY中。
下面是具体使用的语法:
read -p
hello3.sh的脚本可以改成如下:
#!/bin/bash
read -p "May I ask your name: " name
echo "Hello $name"
exit 0
限制输入内容的个数
我们还可以使用 read命令的-n 选项,此选项后面需要接一个数字,可以限制输入内容的个数。
#!/bin/bash
read -p "May I ask your name: " name
echo "Hello $name"
read -n1 -p "Press any key to exit"
echo
exit 0
控制输入内容的可见性
目前,我们输入的内容都是可见的,但有些敏感的数据,如密码,信用卡号等信息,输入时并不想可见。那么可以使用read -s。
read -s
这时再输入时,就有一个钥匙的标识,而且输入时不可见。
实例演示
现在有一个小程序,要求把指定后缀的文件备份到指定的目录下,代码如下:
#!/bin/bash
# Script to prompt to back up files and location
# The files will be search on from the user's home
# directory and can only be backed up to a directory within $HOME
read -p "Which file types do you want to backup " file_suffix
read -p "Which directory do you want to backup to " dir_name
# The next lines creates the directory if it does not exist
test -d $HOME/$dir_name || mkdir -m 700 $HOME/$dir_name
# The find command will copy files the match the
# search criteria ie .sh . The -path, -prune and -o
# options are to exclude the back directory from the
# backup.
find $HOME -path $HOME/$dir_name -prune -o \
-name "*$file_suffix" -exec cp {} $HOME/$dir_name/ \;
exit 0