下面的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 *.*
答案 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