找回密码
 立即注册
搜索
查看: 1518|回复: 8

[软件] 程序小白,咨询个 Linux Shell 的语法。

[复制链接]
     
发表于 2012-10-12 17:18 | 显示全部楼层 |阅读模式
需求:
如果变量 VAR1 的值为字符 A、B、C 其中的一个,并且变量 VAR2 的值为字符 D、E、F 中的一个。
那么输出 Y ,
否则输出 N。

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

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

使用道具 举报

     
发表于 2012-10-12 18:28 | 显示全部楼层
用grep好像可以实现?

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

使用道具 举报

     
 楼主| 发表于 2012-10-12 19:40 | 显示全部楼层

回 1楼(focky) 的帖子

多谢回答  

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

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

使用道具 举报

     
发表于 2012-10-12 20:17 | 显示全部楼层
[A|B|C]
回复

使用道具 举报

     
发表于 2012-10-12 20:17 | 显示全部楼层
[A|B|C]
回复

使用道具 举报

     
 楼主| 发表于 2012-10-12 20:35 | 显示全部楼层
  1. root@SERVER:/home# cat if
  2. A=$1
  3. if [ ${A} == [A|B|C] ]
  4. then
  5. echo "Y"
  6. else
  7. echo "N"
  8. fi
  9. root@SERVER:/home# sh if A
  10. if: line 3: [: missing `]'
  11. if: line 3: B: command not found
  12. if: line 3: C]: command not found
  13. N
复制代码
回复

使用道具 举报

     
发表于 2012-10-12 21:33 | 显示全部楼层
if [ $opt == "a" -o $opt == "b" -o $opt == "c" ];

要不用case
回复

使用道具 举报

     
发表于 2012-10-13 00:26 | 显示全部楼层
一个笨方法
  1. #!/bin/bash
  2. str=$1
  3. array=("a" "b" "c")
  4. let found=0
  5. for i in "${array[@]}"
  6. do
  7.     echo $i
  8.     if [ "$1" == $i ] ; then
  9.     let found=1
  10. fi
  11. done
  12. if [ $found -eq 1 ] ; then
  13.     echo "Y"
  14. else
  15.     echo "N"
  16. fi
复制代码
回复

使用道具 举报

发表于 2012-10-13 01:37 | 显示全部楼层
run:
apt-get install ruby1.9

  1. #!/usr/bin/env ruby
  2. var1 = "A"var2 = "D"
  3. if 'ABC'.split(//).include?"#{var1}" and 'DEF'.split(//).include?"#{var2}"    puts "yes"else    put "no"end
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2025-9-13 13:32 , Processed in 0.084958 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表