linux 拦截shell的输入,linux shell 处理用户输入

1.来自命令行的参数

./test 10 20 40   这些变量被成为位置参数. $0为程序名, $1为第一个参数, $2为第二个参数.....

2.特殊的参数变量

参数计数: $# 表示来自命令行的参数个数

所有参数: $* 和 $@在一个变量中包含所有命令行参数. $*把所有参数当场一个单词处理. $@将所有参数作为同一个字符串中的多个单词处理.

位移: shift 将每个参数变量左移一个位置.  ( $0不变, 丢弃原$1变量 )

3.处理选项

看一个例子

#!/bin/bash

# extracting command line options

while [ -n "$1" ]

do

case "$1" in

-a) echo "-a option is in command line" ;;

-b) echo "-b option is in command line" ;;

-c) echo "-c option is in command line" ;;

*) echo "$1 is not a option" ;;

esac

shift

done

输入输出:

allen@ubuntu:~/homework$ ./shell.sh -a -b -c -d

-a option is in command line

-b option is in command line

-c option is in command line

-d is not a option从参数中分离选项:

有时会遇到即需要参数又需要选项的情况, 通过一个特殊字符码将二者分离: 双破折号 --

#!/bin/bash

while [ -n "$1" ]

do

case "$1" in

-a) echo "-a option is in command line" ;;

-b) echo "-b option is in command line" ;;

-c) echo "-c option is in command line" ;;

--) shift

break ;;

*) echo "$1 is not a option" ;;

esac

shift

done

count=1

for param in $@

do

echo "Parameter #$count: $param"

count=$[ $count + 1 ]

done

输入输出:

allen@ubuntu:~/homework$ ./shell.sh -a -b -c -- v1 v2 v3

-a option is in command line

-b option is in command line

-c option is in command line

Parameter #1: v1

Parameter #2: v2

Parameter #3: v3

处理带值的选项:

#!/bin/bash

while [ -n "$1" ]

do

case "$1" in

-a) echo "-a option is in command line" ;;

-b) param="$2"

echo "-b option with parameter value $param"

shift 2;;

-c) echo "-c option is in command line" ;;

--) shift

break ;;

*) echo "$1 is not a option" ;;

esac

shift

done

count=1

for param in $@

do

echo "Parameter #$count: $param"

count=$[ $count + 1 ]

done

输入输出:

allen@ubuntu:~/homework$ ./shell.sh -a -b v1 -c -- v2 v3

-a option is in command line

-b option with parameter value v1

Parameter #1: v2

Parameter #2: v3

使用getopt命令:

getopt options optstring parameters

选项字符串(optstring)是处理的关键,它定义命令行中的有效选项字母,还定义哪些选项字母需要参数值.

首先,在选项字符串(optstring)中列出将在脚本中用到的每个命令行选项字母.然后,在每个需要参数值的选项字母后面放置一个冒号.

allen@ubuntu:~$ getopt ab:cd -a -b v3 -cd v1 v2

-a -b v3 -c -d -- v1 v2在脚本中使用getopt:

通过set命令处理shell中的各种变量 ---- 将原始脚本命令行参数送给getopt,然后将getopt命令的输出送给set命令

set -- `getopt -q ab:cd "$@"`

4.获取用户输入

read命令接受标准输入,或其他文件描述符输入

#!/bin/bash

echo -n "Enter your name:"

read name

echo "Hello $name, welcome!"

allen@ubuntu:~/learnlinux$ ./read.sh

Enter your name:allen

Hello allen, welcome!

read输入多个变量:

read -p "Enter your name: " first last

通过read读取文件:

每用一次read命令都会读取文件中的一行文本,当文件中没有可读的行时,read命令将以非零退出状态退出

#!/bin/bash

count=1

cat test | while read line

do

echo "Line $count: $line"

count=$[ $count + 1 ]

done

echo "Finished read the file"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值