我正在尝试编写一个脚本,在某些时候我需要列出一个目录中的所有东西并从该目录中获取一些东西。我不能用 ls 做到这一点。ls不是我做的。所以我尝试用 echo 命令代替 ls 的工作,但它现在给了我一个权限被拒绝的错误。你可以看到下面的脚本:
#!/bin/sh
# Test for network connection
for interface in $(echo $(/sys/class/net/*) | grep -v lo);
do
if [ "$(cat /sys/class/net/"$interface"/carrier)" = 1 ]; then
OnLine=1;
fi
done
if ! [ $OnLine ]; then echo "Not Online" > /dev/stderr;
exit;
fi
我收到了这个错误:
./carriercontrol.sh: line 10: /sys/class/net/apcli0: Permission denied
我能做些什么来完成这个脚本?有没有办法获取目录列表并用管道传输它。即使我可以摆脱该许可,我认为回声会给我带来更多麻烦。
编辑: 我试图用 find 命令替换 echo ,这是结果和错误。
#!/bin/sh
# Test for network conection
for interface in $(find /sys/class/net -mindepth 1 | grep -v lo);
do
if [ "$(cat /sys/class/net/"$interface"/carrier)" = 1 ]; then
OnLine=1;
fi
done
if ! [ $OnLine ]; then echo "Not Online" > /dev/stderr;
exit;
fi
cat: can't open '/sys/class/net//sys/class/net/ra0/carrier': No such file or directory
cat: can't open '/sys/class/net//sys/class/net/eth0/carrier': No such file or directory
cat: can't open '/sys/class/net//sys/class/net/br-lan/carrier': No such file or directory
cat: can't open '/sys/class/net//sys/class/net/eth0.1/carrier': No such file or directory
cat: can't open '/sys/class/net//sys/class/net/apcli1/carrier': No such file or directory
cat: can't open '/sys/class/net//sys/class/net/apcli0/carrier': No such file or directory
您似乎想查询下面的
carrier
文件/sys/class/net/*/
以查看是否至少有一个指示您是否在线(忽略*/lo/carrier
)。使用 shell 循环:
使用
bash
:或者,作为
bash
“几乎单线”1
最后一个假设如果该运营商在线并且没有数据,或者至少 no1
,如果不是,则文件包含一位数。上面的循环(使用)将只从每个文件
read
中读取第一行,直到找到 a 为止。carrier
1
您的代码中的问题是命令替换
$(/sys/class/net/*)
,它将尝试将第一个匹配的文件名作为命令执行,而其他匹配的文件名作为参数。此外,只要非空,测试
[ $OnLine ]
就会为“真” 。$OnLine
如果运营商不在线,我不确定您解析的文件包含什么,但即使是零也会被视为“真实”。这些单线怎么样。即
grep
明确排除了环回。GNU grep
注意:要求 GNU
grep
日期为 2001 年 3 月或以后。特别不适grep
用于 OpenWRT 中捆绑的 BusyBox。适用于旧 GNU grep 版本和非 GNU grep 的解决方案
例如 BusyBox 版本。
你可以尝试在sudo模式下执行上面的脚本
$须藤苏
“在这里执行你的脚本”