或运算符并检查6个空字符和空文件(shell脚本)

时间:2012-12-13 03:19:29

标签: sh

下面的shell脚本是test.sh,目前它能够检查第10到第15个字符是否等于'000000'。但是它也应检查''6个空格以及空文件。问题是: 1)如何检查空文件?

filename=$1

extracted=`head -1 $filename | cut -c10-15`

if [ $extracted -eq '000000' ] ###how to check for '      ' 6 null character with or operator?
then 
mv $filename new.$filename
fi

e.g。 输入文件:

案例1(6个零000000之前和之后的一些字符)truefile.txt:

123456789000000161718

案例2(空文件)trueemptyfile.txt:

"there's nothing in this file. Empty. "

案例3('6个空字符前后的某些字符)truepartialempty.txt

123456789      16171819

谢谢

还有一件事,这些文件都在/ temp文件夹下

/temp> ls

 test.sh truefile.txt trueemptyfile.txt truepartialempty.txt

如何运行test.sh来检查所有文件。谢谢。

是吗?

 sh test.sh *.*

1 个答案:

答案 0 :(得分:0)

您必须更好地定义空字符的含义。

当您显示' '时,这些是空格字符。 null这个词有几个intrepetations。在DB land中,NULL是特殊字,表示“未知值”。在编程NUL,或NULL或null时,可能意味着char \000。该数字值用作特殊标记,用于指示“C”程序(至少)“字符串结束”。

假设你的意思是空间字符,你可以准确地搜索它们:

if [ $extracted -eq '       ' ] 
#--------------------^^^^^^^

但请注意,$ exeded不能等于000000和'',对吗?

也许您会发现更容易测试这些值,如

if echo "$extract" | grep -q '000000' ; then
      echo found 000000
fi
if echo "$extract" | grep -q '      ' ; then
       echo found spaces
fi

注意,由于\ 000到c-lang程序的特殊含义,包括grep和unix中的所有内容,你无法可靠地做到

if echo "$extract" | grep -q '\000\000\000\000\000\000\000' ; then 
 ....

(实际上,这可能有用,因为“$ extract”不是文件,但如果你尝试grep -q '\000' myFile,那可能无法可靠地工作,因为根据定义,里面有一个'\ 000'的文件是一个二进制文件,而不是文本文件,grep,et.al。是扫描文本文件的工具。)

如果真的是你想要的话,有可能找到这些技巧,所以请编辑你的问题以表明这是否是你的要求。

IHTH