测试交换然后正常退出的脚本

测试交换然后正常退出的脚本

我正在寻找一个脚本来测试交换,如果发现交换是该脚本的一部分,则可以正常退出:

#!/bin/bash
# This script formats and mounts /dev/sdc

{
if [ ! -f /scripts/alert ]; then
    echo "File not found!"
    exit 0
fi
} 

mkswap /dev/sdc && swapon /dev/sdc

#END

答案1

缺少swapinfo(*BSD),swapon -s(交换使用)是第二好的选择。

以下任何一种方法都可以解决问题,$?如果设置了一个或多个交换,则设置为 0:

/sbin/swapon -s | grep -q /dev
grep -q /dev /proc/swaps
free | awk '/Swap/{ exit(!$2)}'
awk '/SwapTotal/ {exit (!$2)}' /proc/meminfo

最后两个命令可能是最强大的,前两个命令不会(按原样)确认交换的存在,当仅有的使用交换文件(有点不寻常,但可能在操作系统安装过程中或在无盘系统上发现通过 NFS 交换)。

您可以用它来检测(或计算,-c代替-q)交换:

grep -qE "(partition|file)" /proc/swaps

(这也将计算掉期/dev/nbd 网络块设备,交换块设备被视为“分区”交换设备,至少到 linux-3.13.5 为止。)

答案2

我不确定每个系统上的每个交换是否总是包含“/dev”...并且/或者如果您想知道有多少个交换正在使用中...

我认为 /proc/swaps 应该为每个正在使用的交换添加一行,如果没有交换,则只有一行(标题)。因此wc -l应该说明行数,因此交换数 - 1。

因此这应该给出正在使用的交换次数:

 swapnum=$(( $(cat /proc/swaps|wc -l) - 1 ))

(或者如果你因为某种原因真的很讨厌猫,)

 swapnum=$(( $(wc -l < /proc/swaps) - 1 ))

并且可以测试是否= 0 或其他

相关内容