跳转至

第 14 章 处理用户输入

约 142 个字 37 行代码 1 张图片 预计阅读时间 1 分钟

命令行参数、选项与交互式输入。

14.1 参数

Bash
# script.sh arg1 arg2
echo $0          # 脚本名
echo $1 $2       # 位置参数
echo $#          # 参数个数
echo $@          # 全部参数(独立字符串)
echo $*          # 全部参数(单字符串)
shift            # 左移,$2→$1
shift 2

14.2 getopts

Bash
while getopts ":ab:c:" opt; do
  case $opt in
    a) flag_a=1 ;;
    b) val_b=$OPTARG ;;
    c) val_c=$OPTARG ;;
    \?) echo "Invalid: -$OPTARG" ;;
    :) echo "Option -$OPTARG needs arg" ;;
  esac
done
shift $((OPTIND - 1))   # 剩余参数
  • 选项字符串:: 前缀表示该选项需要参数
  • 首字符 : 静默错误

14.3 交互输入

Bash
read -p "Name: " name
read -s -p "Password: " pass   # -s 不回显
read -t 5 -n 1 key             # 超时 5 秒,读 1 字符

# 从文件读
while read line; do ...; done < data.txt

14.4 脚本参数模板

Bash
#!/usr/bin/env bash
set -euo pipefail
usage() { echo "Usage: $0 [-v] [-f file]"; exit 1; }
verbose=0; file=""
while getopts ":vf:" opt; do
  case $opt in
    v) verbose=1 ;;
    f) file=$OPTARG ;;
    *) usage ;;
  esac
done
shift $((OPTIND - 1))
# 剩余位置参数: $@

评论