如何检查输入是一个单词还是2用分隔符分隔“ - ”

时间:2016-10-10 12:47:11

标签: awk ksh

我需要以下ksh脚本的帮助:

ExpResult=`echo "$LoadString" | awk -F"-" '{print NF}'=2`

MinExp=`echo "$ExpResult" | tr -s " " | sed 's/^[ ]//g'| cut -d"-" -f1`
MaxExp=`echo "$ExpResult" | tr -s " " | sed 's/^[ ]//g'| cut -d"-" -f2`

我可以输入两个选项:“50-100”或“50”(例如)

我有两个问题:

  1. 如何检查输入是“一个字”还是用分隔符“ - ”分隔的两个单词?
  2. 如果输入是两个单词,我该如何分开?

2 个答案:

答案 0 :(得分:1)

您可以使用内部case语句验证输入和参数扩展功能以转换输入,而不是调用外部程序来解析输入,即

 # set a copy/paste value for $1
 set -- 50-10

 case "$1" in
  *-* ) 
    range="$1"
    min="${range%-*}"
    max="${range#*-}"
 ;;
 * )
   singleNum="$1"
 ;;
esac
echo min=$min ... max=$max

<强>输出

min=50 ... max=100

尝试非配对

unset min max 
set -- other values
case ...
echo min= ... max= ... singleNum=$singleNum

<强>输出

min= ... max= ... singleNum=other   

希望案例处理不言自明,但参数扩展可能需要一些解释。

声明

  min=${range%-*}

表示从扩展值(50-100)的右侧删除从最后-开始直到字符串结尾的任何内容。这会留下值50

相反
max=${range#*-} 

表示从扩展值的左侧删除任何内容,直到第一个-字符。这留下了100

由于此字符串中只有一个-字符,因此您不必担心${var##*-}的其他版本,它们会从左侧删除所有字符,直到最后一个匹配-和反向${var%%-*},从右(向后)移除所有内容,直到第一个-字符。

狂热的极简主义者会提醒我们,这可以在没有临时变量的情况下完成,即

  min=${1%-*} ; max=${1#*-} 

单行幻想家可以满意

case "$1" in *-* ) range="$1";min="${range%-*}";max="${range#*-}";;* ) singleNum="$1";;esac; echo min=$min ... max=$max .,, singleNum=$singleNum

: - )

IHTH

答案 1 :(得分:0)

你可以试试这个;

<div class="row">
    <div class="col-xs-12">
     <a href="#" class="btn btn-default">test loooooooooooooooooooongstring<a>
    <br /><br />
   <button class="btn btn-default">test loooooooooooooooooooongstring</button>
    </div>
</div>

例如:

LoadString=$1
MinExp=`echo "$LoadString" | awk -F"-" '{if (NF==2) print $1}`
MaxExp=`echo "$LoadString" | awk -F"-" '{if (NF==2) print $2}`
echo $MinExp
echo $MaxExp