【问题标题】:how to compare umask如何比较 umask
【发布时间】:2012-09-04 02:17:06
【问题描述】:

我正在尝试比较用户的umask。我在进行比较时遇到错误。我使用的代码是

val=`su - user -c "umask" | tail -2 | sed -n "/[0-9]/p"`
if [ $val -eq 744 ]
then

   echo "477 found."

fi

当我执行此操作时,我收到如下错误:

sh: ^[H: A test command parameter is not valid.

我已经尝试在比较命令中使用=,但仍然无法正常工作。

请给点建议。

问候。


val 已初始化为0

我以 root 身份运行它,所以没有登录。

我也尝试过引用。

【问题讨论】:

  • 测试前 $val 中的内容是什么?试试echo "$val"
  • su 是否会生成密码提示,最终是 val 的值?
  • val 在发出命令之前被初始化为 0。我以 root 身份运行这个脚本,所以没有密码提示
  • 你在测试前检查(即输出)$val 的值了吗?里边啥啊?顺便提一句。 umask 的输出是什么?对我来说,它只是 umask,所以不需要 tail 和 sed ...
  • 你能在你的机器/shell上给出umask的输出吗?没有tailsed,它对我有用。

标签: linux shell unix interactive


【解决方案1】:

你应该在你的测试表达式中引用变量名:

if [ "$val" -eq 744 ]

请参阅here 了解原因。

【讨论】:

  • 也这样做了...但又得到了一个错误,例如: sh: ^M^[[3g^M ^[H ^[H ^[H ^[H ^[H ^[H ^ [H ^[H ^[H^M02:语法错误
  • 请参阅 cdarke 对您机器上“umask”输出的评论。我希望有一个简单的 4 字符字符串,例如“0022”,而不是您似乎得到的控制字符流。
【解决方案2】:

您的代码在我的机器上运行良好,我可以建议的唯一解决方案是使用稍微不同的语法,有时不同的 bash 版本会抱怨一种语法并接受另一种语法:

val=`su - user -c "umask" | tail -2 | sed -n "/[0-9]/p"`
if [[ $val -eq 477 ]] ; then
   echo "477 found."
fi

查看here 了解[ cond ][[ cond ]] 之间的区别。

【讨论】:

  • ...以及[ cond ](( cond ))的区别。
猜你喜欢
  • 2012-11-10
  • 2012-04-29
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
相关资源
最近更新 更多