检查文件中是否存在字符串(ksh)

时间:2013-04-10 19:27:47

标签: shell unix scripting ksh

这个KornShell(ksh)脚本应该做的是检查我的dmesg中的磁盘,内部和外部。在dmesg输出中,内部驱动器显示为wd [0-9],外部显示为sd [0-9]。我当然没有这么多磁盘,但我希望我的脚本尽可能多地涵盖。将检查设备0-9。所以这就是这个想法:

创建两个大小为9的数组,如果wd0存在则搜索dmesg,如果是,则使内部的第一个元素为1,如果wd1存在,则使数组1的第二个元素为0,否则为0。

如果要搜索一个特定的磁盘,例如wd0,我可以这样做:

internal=`dmesg | grep "^wd0" | head -n 1 | cut -d\  -f1`

使

internal = wd0

但是如何检查字符串wd0-wd9是否以“循环”方式存在于dmesg中

# create arrays
set -A internals 0 0 0 0 0 0 0 0 0 
set -A externals 0 0 0 0 0 0 0 0 0

(下面的代码不是ksh代码,而是以类似c语法呈现的想法):

for (i=0;i<=8;i++){
    if (wd0) # that is if wd0 exists, if wd1 exists etc.
        internal[i] = 1;
    else
        internal[i] = 0;
}

当然,外部应遵循相同的过程。

1 个答案:

答案 0 :(得分:0)

我认为以下内容应该让您前进,不完全确定您希望数组设置的值,但这里是:

#!/bin/ksh

set -A internal 

for i in {0..9}
do
   echo "Looking for wd"$i
   internal[$i]=`dmesg | grep "^wd$i" | head -n 1 | cut -d\  -f1`
   if [[ ${internal[$i]} = "wd"$i ]];then
     internal[$i]=1
   else
     internal[$i]=0
   fi
done