检查 shell 脚本中的 umask
Checking the umask in shell script
如何检查 umask 是否阻止设置组位?我的尝试:
#!/bin/sh
out=$(umask)
echo "$out"
if (($out & 070) != 0); then
echo "$out"
echo "Incorrect umask" > /dev/tty
exit 1
fi
输出:
./test.sh: line 6: syntax error near unexpected token `!='
./test.sh: line 6: `if (($out & 070) != 0); then'
我同意切换到 bash 如果它能让事情变得更容易。
您需要使用双括号来进行算术计算。参见 https://www.gnu.org/software/bash/manual/bashref.html#Conditional-Constructs
m=$(umask)
if (( ($m & 070) != 0 )); then
echo error
fi
或者您可以将 umask 视为字符串并使用 glob-pattern matching:
if [[ $m == *0? ]]; then
echo OK
else
echo err
fi
bash 有很多独特的语法:它根本不是 C/perl-like。阅读(或至少参考)手册并在此处阅读大量 bash 问题。继续提问。
如何检查 umask 是否阻止设置组位?我的尝试:
#!/bin/sh
out=$(umask)
echo "$out"
if (($out & 070) != 0); then
echo "$out"
echo "Incorrect umask" > /dev/tty
exit 1
fi
输出:
./test.sh: line 6: syntax error near unexpected token `!='
./test.sh: line 6: `if (($out & 070) != 0); then'
我同意切换到 bash 如果它能让事情变得更容易。
您需要使用双括号来进行算术计算。参见 https://www.gnu.org/software/bash/manual/bashref.html#Conditional-Constructs
m=$(umask)
if (( ($m & 070) != 0 )); then
echo error
fi
或者您可以将 umask 视为字符串并使用 glob-pattern matching:
if [[ $m == *0? ]]; then
echo OK
else
echo err
fi
bash 有很多独特的语法:它根本不是 C/perl-like。阅读(或至少参考)手册并在此处阅读大量 bash 问题。继续提问。