LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 765|回复: 1

bash数组的问题{解决}

[复制链接]
发表于 2009-5-16 08:31:40 | 显示全部楼层 |阅读模式
已经设好变量了:

    declare -a xa ya za

    xa=(`awk ' (($3 > 22222) && ($2>=1)) {print $2}' /proc/partitions`)

    ya=(`mount |  awk '/sda/ {print $1}' | tr -d [:punct:][:lower:]`)

    if [ -f /proc/swaps ];then
        za=(`awk '/sda/ {print $1}' /proc/swaps  | tr -d [:punct:][:lower:]`)
    fi

$  echo ${xa[@]}, ${ya[@]}, ${za[@]}  
1 2 5 6 7 8 9 10 11, 8 7 2 5 9 10, 6     

xa为所有可加载的分区, ya为已加载的分区, za 为swap分区



请教怎么得到剩下的分区:1   11, 不知用什么语句??
 楼主| 发表于 2009-5-16 13:41:41 | 显示全部楼层
搞定,, 不过语法太滥,不明白的地方都借助 if 了

功能就是加载所有没有加载的硬盘分区

function allmnt {
    declare -a xa ya za ua
    xa=(`awk ' (($3 > 22222) && ($2>=1)) {print $4}' /proc/partitions | tr -d [:lower:]`)
    ya=(`mount |  awk '/sda/ {print $1}' | tr -d [:punct:][:lower:]`)
    if [ -f /proc/swaps ];then
        za=(`awk '/sda/ {print $1}' /proc/swaps  | tr -d [:punct:][:lower:]`)
    fi
    ja=0
    pd=0
    pd2=0
    for((i=0; i<${#xa[@]}; i++)); do
        for((j=0; j<${#ya[@]}; j++)); do
            if [[ ${xa[$i]} == ${ya[$j]} ]]; then
                pd=1
                break
            fi
        done
        for((k=0; k<${#za[@]}; k++)); do
            if [[ ${xa[$i]} == ${za[$k]} ]]; then
                pd=1
                break
            fi
        done
        if [[ $pd == 0 ]]; then
            ua[$ja]=${xa[$i]}
            ja=$ja+1
        fi
        pd=0
        continue
    done
    for((i=0; i<ja; i++)); do
        test -e '/media/sda'${ua[$i]} && pd2=0
        if [[ -e '/media/sda'${ua[$i]} ]]; then
            pd2=0
        fi
        if [[  $pd2 == 1 ]]; then
            mkdir '/media/sda'${ua[$i]}
            pd2=0
        fi
        mount   `printf '/dev/sda'${ua[$i]}`  `printf '  '`  `printf '/media/sda'${ua[$i]}`
    done
}
回复 支持 反对

使用道具 举报

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

本版积分规则

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