shell(7) 用户交互.doc

命令行参数, positional parameter

$0 完整程序名 (basename 命令可去掉路径 )

$1 第一个参数,超出 9 ${10}

$# 参数个数

$* 命令行中的所有参数,作为一个单词

$@ 命令行中的所有参数,作为多个单词

$$ 当前 shell PID

$- shell 的一些属性

$! 前一个后台进程的 PID

 

echo `basename $0`              # 获得程序名

echo ${!#}                    # 获得最后一个参数

for((i=1; i<=$#; ++i)); do   # 遍历参数

    echo ${!i}                     #{} 中不能用 $ ,可使用 ! 替代

done

for a in $@; do                    # 另一种遍历的方法, $@ 换成 $* 也可以

    echo $a

done

 

shift 命令

改变命令行参数的相对位置,默认左移 1 位,即 $3 变成 $2 $2 变成 $1 $1 被丢弃

eg: 另一种遍历参数的方法

while [ -n "$1" ]; do

    echo $1

    shift

done

 

getopts 分析参数

 

read ,获取用户输入

read                     # 读入到变量 $REPLY

read name              # 读入到 name

read -p "input your name:" name          # 带提示的 read

read name age             # 读入以空格分隔的多个变量

read -t 5 name             # 等待 5 秒,超时返回失败

if read -t 5 name, then

read -n1 -p "input [Y/N]" answer

# 设置读入的字符数——读入一个字符,这样无须回车,在 emacs 下失败,但终端可以

read -s -p "input pwd" pwd          # 不显示输入, emacs 下失败,但普通终端可以

 

read ,读入文件

一次读入 1 行,不能直接以文件名为参数,需要使用 cat 等命令

cat a.txt | while read line      #read 重定向的一个应用吧?

do

       echo $line

done

 

输出

printf "format" a1 a2 ...

eg: printf "af 0x%x" 11               # 格式控制符同 c

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值