日期:2014-05-16  浏览次数:20858 次

一个关于shell if语句的问题 急求帮忙
我想比较用shell的if语句比较:如果 s1不是以html或者txt结尾的字符串 那么就替换s1 分别试过 if [ ! "*.html" -o ! "*.txt" ]  
  if [ $s1!="*.html" -o $s1!="*.txt" ] 都出错 ? 请问 用 if [] 能实现吗

------解决方案--------------------
举了三个例子,直接替换,你看看。有很多情况要判断的话是不是考虑用sed,网上很多sed的例子。
我是参考了这篇文章:http://www.cnblogs.com/chengmo/archive/2010/10/02/1841355.html
文章写着支持正则表达式,我没有试出来。
Assembly code

[root@RHEL6A scripts]# more s4.sh 
s1='/homt/html/txt/abcd/asdf.html'
echo $s1
s1=${s1/%txt/EEE}
s1=${s1/%html/EEE}
echo $s1

s1='/homt/html/txt/abcd/asdf.txt'
echo $s1
s1=${s1/%txt/EEE}
s1=${s1/%html/EEE}
echo $s1

s1='/homt/html/txt/abcd/asdf.abc'
echo $s1
s1=${s1/%txt/EEE}
s1=${s1/%html/EEE}
echo $s1
[root@RHEL6A scripts]# ./s4.sh 
/homt/html/txt/abcd/asdf.html
/homt/html/txt/abcd/asdf.EEE
/homt/html/txt/abcd/asdf.txt
/homt/html/txt/abcd/asdf.EEE
/homt/html/txt/abcd/asdf.abc
/homt/html/txt/abcd/asdf.abc
[root@RHEL6A scripts]#

------解决方案--------------------
C/C++ code
#!/bin/bash

echo $1 | awk '/.*\.html/{print}';

------解决方案--------------------
探讨
C/C++ code

#!/bin/bash

echo $1 | awk '/.*\.html/{print}';

------解决方案--------------------
探讨

引用:
C/C++ code

#!/bin/bash

echo $1 | awk '/.*\.html/{print}';

楼主说html或者txt结尾,这个可以同时判断两种情况吗?我的虚拟机关了就不启动来试了,回帖直接问一下

------解决方案--------------------
探讨

引用:
C/C++ code

#!/bin/bash

echo $1 | awk '/.*\.html/{print}';

楼主说html或者txt结尾,这个可以同时判断两种情况吗?我的虚拟机关了就不启动来试了,回帖直接问一下

------解决方案--------------------
这论坛没编辑功能吗?我去.


VB.NET code
s2=${s1##*.}
[[ $s2 != "txt" && $s2 != "html" ]] && s1=string

------解决方案--------------------
改下,加个结尾符"$":
echo $1 | awk '/.*\.(html|txt)$/{print}';

探讨
引用:

引用:
C/C++ code

#!/bin/bash

echo $1 | awk '/.*\.html/{print}';

楼主说html或者txt结尾,这个可以同时判断两种情况吗?我的虚拟机关了就不启动来试了,回帖直接问一下


C/C++ code
#!/bin/bash
……