linux shell 处理用户输入

来源:互联网 发布:thinking in java在线 编辑:程序博客网 时间:2024/05/16 07:15

1.来自命令行的参数

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

2.特殊的参数变量

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

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

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

3.处理选项

看一个例子

#!/bin/bash# extracting command line optionswhile [ -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        shiftdone

输入输出:

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/bashwhile [ -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        shiftdonecount=1for 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 lineParameter #1: v1Parameter #2: v2Parameter #3: v3
</pre><span style="color:rgb(0,102,0); font-size:14px">处理带值的选项:</span><p></p><p><span style="font-size:14px; color:#006600"></span></p><pre code_snippet_id="412803" snippet_file_name="blog_20140701_6_2667625" name="code" class="plain">#!/bin/bashwhile [ -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        shiftdonecount=1for 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 v1Parameter #1: v2Parameter #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/bashecho -n "Enter your name:"read nameecho "Hello $name, welcome!"
<pre name="code" class="plain">allen@ubuntu:~/learnlinux$ ./read.sh Enter your name:allenHello allen, welcome!


read输入多个变量:

read -p "Enter your name: " first last

通过read读取文件:

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

#!/bin/bashcount=1cat test | while read linedo        echo "Line $count: $line"        count=$[ $count + 1 ]doneecho "Finished read the file"

 




 




0 0
原创粉丝点击