read
read 命令用于一个一个词组地接收输入的参数,每个词组需要使用空格进行分隔;如果输入的词组个数大于需要的参数个数,则多出的词组将被作为整体为最后一个参数接收。
实例及参数说明:
# 脚本 test.sh 内容
read firstStr secondStr
echo "第一个参数:${firstStr} 第二个参数:${secondStr}"
# 执行脚本 test.sh
sh test.sh
one two three
# 输出
第一个参数:one 第二个参数:two three
read 参数说明:
- -p 输入提示文字
- -n 输入字符长度限制(达到6位,自动结束)
- -t 输入限时
- -s 隐藏输入内容
实例:
# 脚本 test.sh 内容
read -p "请输入一段文字:" -n 6 -t 5 -s password
echo -e "\npassword is $password"
# 执行脚本 test.sh
sh test.sh
请输入一段文字:
123456789
# 输出
password is 123456789
echo
从之前学习的例子看来,echo就是用于字符串的输出,这个字符串可以直接是字符串,也可以是变量。
具体的功能有以下几种:
显示普通字符串
# 这里字符串加不加双引号结果都是一样的
echo "It is a test"
echo It is a test
# 输出:
It is a test
显示转义字符
echo "\"It is a test\""
echo \"It is a test\" # 双引号也可以省略
# 输出:
It is a test
显示变量
有两种情况,一种是通过read命令读取用户输入的变量,然后输出;一种是脚本内部的变量,相当于字符串。
# 用户输入变量
#! /bin/sh
read name
echo "My name is ${name}"
# 执行
sh test.sh
Jerry
# 输出
My name is Jerry
# 脚本内部变量
#! /bin/sh
time=$(date)
echo "time is ${time}"
# 直接执行脚本并输出:
Sat Jun 29 15:41:38 UTC 2019
显示命令执行结果
以上通过变量获取时间再输出的方式,可以直接把获取时间的命令放在echo中输出:
# 脚本内容
echo `date`
# 输出
Sat Jun 29 15:41:38 UTC 2019
输出结果到文件中
通常用在写日志里
# 脚本内容
echo "time is `date`" > filename
echo "time is `date`" >> filename
-
表示将echo的内容写进 filename文件中,若文件中已有内容,先删除后添加
-
表示将echo 的内容追加到 filename 文件中,不删除文件原有内容
printf
学过C语言的应该都知道C的输出命令最常用的就是printf了,Shell中的printf也差不多,可以给输出的内容指定类型,具体语法如下:
printf format-string [arguments...]
- format-string: 为格式控制字符串
- arguments: 为参数列表
举个例子
#! /bin/bash
printf "%-10s %-8s %-4.2f\n" Jerry 男 62.2223
# 输出为:
Jerry 男 62.22
%s %c %d %f都是格式替代符
- d: Decimal 十进制整数 – 对应位置参数必须是十进制整数
- s: String 字符串 – 对应位置参数必须是字符串或者字符型
- c: Char 字符 – 对应位置参数必须是字符串或者字符型
- f: Float 浮点 – 对应位置参数必须是数字型
例子中的%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来;%-4.2f 指格式化为小数,其中.2指保留2位小数。
更多实例说明:
# 1.格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
printf "%s %s %s\n" a b c d e f g h i j
# 输出为
a b c
d e f
g h i
j
# 2.如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替
printf "%s and %d \n"
# 输出为
and 0