linux shell 处理用户输入

本文介绍了如何在Linux Shell脚本中处理命令行参数,包括位置参数、特殊参数变量、位移操作以及选项处理。同时,讲解了如何利用getopt命令解析带有选项的参数,并使用set命令进行处理。此外,还探讨了使用read命令获取用户输入的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
</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/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!"

<pre name="code" class="plain">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"

 




 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值