我的shell脚本如下所示:
#!/bin/bash # Make sure only root can run our script [ $EUID -ne 0 ] && (echo "This script must be run as root" 1>&2) || (exit 1) # other script continues here...
当我用非root用户运行上面的脚本时,它会打印消息“This script …”,但它不会退出,它会继续使用剩余的脚本。 我究竟做错了什么?
注:我不想使用条件。
在bash中search和回显一部分string
不读最后一行文件的脚本
从命令行运行Scheme
如何在Linux内核中启用CONfig_PREEMPT选项?
linux高内核cpu使用率在内存初始化上
我可以使用单个Jsch对象打开多个频道吗?
C ++和Thrift:参考需要开始
是否需要在softirq上下文中调用rcu_read_lock
在Linux上的HTTP POST调用中模拟延迟
我可以在Linux上签署iOS应用程序吗? (也许使用codeign的端口?)
你正在运行echo并exit subhells。 退出呼叫只会离开这个子shell,这是有点没有意义的。
试试:
#! /bin/sh if [ $EUID -ne 0 ] ; then echo "This script must be run as root" 1>&2 exit 1 fi echo hello
如果由于某种原因,你不想要一个条件,只要使用:
#! /bin/sh [ $EUID -ne 0 ] && echo "This script must be run as root" 1>&2 && exit 1 echo hello
注意:no ()和固定的布尔条件。 警告:如果echo失败,该测试也将无法退出。 if版本更安全(更易读,更容易维护IMO)。
我认为你需要&&而不是|| ,因为你想回声并退出(不回显或退出)。
另外(exit 1)会运行一个退出而不是退出当前shell的子shell。
以下脚本显示您需要:
#!/bin/bash [ $1 -ne 0 ] && (echo "This script must be run as root." 1>&2) && exit 1 echo Continuing...
运行这个./myscript 0给你:
Continuing...
而./myscript 1给你:
This script must be run as root.
我相信这就是你要找的。
我会这样写:
(( $EUID != 0 )) && { echo "This script must be run as root" 1>&2; exit 1; }
使用{ }进行分组,该分组在当前shell中执行。 请注意,大括号和结尾的分号周围的空格是必需的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。