LonelyTB 发表于 2012-10-12 17:18

程序小白,咨询个 Linux Shell 的语法。

需求:
如果变量 VAR1 的值为字符 A、B、C 其中的一个,并且变量 VAR2 的值为字符 D、E、F 中的一个。
那么输出 Y ,
否则输出 N。

我的代码:
if [ ${VAR1} == XXX ] && [ ${VAR2} == YYY ]
then
echo "Y"
else
echo "N"
fi

请问下 XXX 和 YYY 那里应该填什么呢?
或者有其他更合适的写法吗?
多谢。

focky 发表于 2012-10-12 18:28

用grep好像可以实现?

x=`echo $VAR1 |grep `
y=`echo $VAR2 |grep `
if [ ${#x} -gt 0 ] && [ ${#y} -gt 0 ]
then
echo "Y"
else
echo "N"
fi

LonelyTB 发表于 2012-10-12 19:40

回 1楼(focky) 的帖子

多谢回答

不过这种写法是否有可能会出现一些小问题。

比如:
希望 VAR1 匹配 AB,BZ或CD 时,输出 Y,
如果按照上面的写法,那么在 VAR1 = BZ 或者 ZC 的时候,if 条件也是成立的,会输出 Y 。

dadark 发表于 2012-10-12 20:17

dadark 发表于 2012-10-12 20:17

LonelyTB 发表于 2012-10-12 20:35


root@SERVER:/home# cat if

A=$1

if [ ${A} == ]
then
echo "Y"
else
echo "N"
fi


root@SERVER:/home# sh if A
if: line 3: [: missing `]'
if: line 3: B: command not found
if: line 3: C]: command not found
N

ulysses 发表于 2012-10-12 21:33

if [ $opt == "a" -o $opt == "b" -o $opt == "c" ];

要不用case

focky 发表于 2012-10-13 00:26

一个笨方法


#!/bin/bash
str=$1
array=("a" "b" "c")
let found=0
for i in "${array[@]}"
do
    echo $i
    if [ "$1" == $i ] ; then
    let found=1
fi
done

if [ $found -eq 1 ] ; then
    echo "Y"
else
    echo "N"
fi


Eternal Wind 发表于 2012-10-13 01:37

run:
apt-get install ruby1.9


#!/usr/bin/env ruby
var1 = "A"var2 = "D"
if 'ABC'.split(//).include?"#{var1}" and 'DEF'.split(//).include?"#{var2}"    puts "yes"else    put "no"end
页: [1]
查看完整版本: 程序小白,咨询个 Linux Shell 的语法。