Shell 输入输出

Shell 默认的输入为键盘输入, 默认输出则是终端的Shell 窗口.Shell 脚本中添加合适的输入, 可以让脚本和用户进行交互起来; 合适添加输出语句, 可以让程序运行一目了然.

1. 标准输入

shell 脚本中使用 read 命令读取用户输入. read命令会读取一个输入行, 遇到换行符终止.

1.1 命令格式

  • read [选项] [变量]
  • read 默认读取一行内容, 遇到回车键结束输入
  • 如果不根变量, 默认将读入的内容防止到 REPLY 变量中

1.2 常用选项

  • -p msg: 显示输入提示:
  • -s : 不回显输入内容, 比如输入密码
  • -t : 读取超时时间
  • -r : 支持读取转义字符, 默认输入\n , \t 等转义字符时,会自动将转义符号 去掉.
  • -a 变量名: 读取行按空格分隔, 存入数组中

1.3 示例程序

#!/bin/bash

echo "please input your info"
read -p "username:" username
read -p "password:" -s password
echo ""
read -p "sex(M/W):" -t 5
read -p "books:" -a books
read -p "brief:" -r brief

echo -e "\nyour input:"
echo -e "username:$username"
echo -e "password:$password"
echo -e "sex:$sex"
echo -e "books:${books[*]}"
echo -e "brief:$brief"

测试输出:

[admin@localhost shell]$ ./read.sh 
please input your info
username:Z & S
password:
sex(M/W):M
books:java mysql
brief:zhang \n \t san

your input:
username:Z & S
password:123456
sex:M
books:java mysql
brief:zhang 
         san
[admin@localhost shell]$

2. 标准输出

shell 脚本中提供了两个用户输出的指令:

  • echo: 输出一行字符串, 默认添加换行符
  • printf: 格式化输出字符串, 默认不添加换行符

2.1 echo 指令

echo 指令有三种语法格式:

  • echo "" : 输出字符串, 双引号中支持变量, 转义字符
  • echo '' : 输出字符串, 是什么就是什么, 变量和转义字符都不会转义
  • echo `` : 输出命令执行结果, 反引号内容为命令, 和直接敲命令没什么两样

2.1.1 输出普通字符串

echo "hello,world!"

2.1.2 输出变量

双引号中, 变量引用会自动转换为值, 单引号中不会

name-zhangsan
echo "name:$name"
echo 'name:$name"

2.1.3 开启转义输出

-e 控制是否开启转义字符, 对单引号和双引号都生效

name="zhangsan"
echo -e "name:\t$name"
echo -e 'name:\t$name'

2.1.4 输出原样字符串

输出原样字符需要注意两点:

  • 使用单引号: 不转换变量
  • 不使用-e选项; 不开启转换转义字符功能
    name="zhangsan"
    echo 'name:$name'
    

2.1.5 输出不换行

默认一条echo 语句执行完会添加一个换行符,若想不输出换行符, 可以在开启转义功能的前提下末尾添加\c

#!/bin/bash

# 输出普通字符串
echo "hello,world!"

# 输出变量
name="zhangsan"
echo "name:\t$name"

# 开启转义输出
echo -e "name:\t$name"

# 输出字符串原样:
echo -e 'name:\t$name'
# 不换行输出
echo -e "hello,\c"
echo "world!"

echo -e 'hello,\c'
echo 'world!'

2.1.6 示例程序

# 不换行输出
echo -e "hello,\c"
echo "world!"

echo -e 'hello,\c'
echo 'world!'

测试输出:

[admin@localhost shell]$ ./echo.sh 
hello,world!
name:\tzhangsan
name:   zhangsan
name:   $name
hello,world!
hello,world!
[admin@localhost shell]$

2.2 printf 指令

2.2.1 命令格式

  • printf 格式串 参数列表

常用占位符: 有多少个占位符就应该有多少个字符串

  • %ns: 输出字符串, 且字符串长度最短为n个字符,靠右对齐
  • %-ns:输出字符串, 且字符串长度最短为n个字符,靠左对齐
  • %nd: 格式化十进制整数, 长度最短为n个字符, 靠右对齐
  • %-nd: 格式化十进制整数, 长度最短为n个字符, 靠左对齐
  • %m.nf: 输出数字, 整数部分长度最短为m个字符, 小数部分长度最多为n个字符, 四舍五入, 靠右对齐
  • %-m.nf: 输出数字, 整数部分长度最短为m个字符, 小数部分长度最多为n个字符, 四舍五入, 靠左对齐

常用示例:

#!/bin/bash

printf "%-10s%-3s%10s\n" 姓名 年龄 分数
printf "%-10s%-3d%10.1f\n" 张三 18 105.53
printf "%-10s%-3d%10.1f\n" 李四 19 105.54
printf "%-10s%-3d%10.1f\n" 王五 17 10235.55

输出结果:

[admin@localhost shell]$ ./printf.sh 
姓名    年龄    分数
张三    18      105.5
李四    19      105.5
王五    17    10235.5
[admin@localhost shell]$

results matching ""

    No results matching ""