我现在正在学习shell,并编写了用于使用函数的小脚本:
#!/bin/bash
show_date () {
date;
}
show_ls () {
ls -la;
}
if [ hostname == "mbp" ]; then
show_ls;
elif [ hostname == "joe" ]; then
show_date;
fi
如果我在主机名mbp
上运行它,它将以0退出并且不调用'show_ls'函数。有什么想法吗?
答案 0 :(得分:3)
如果您不想为主机名创建自己的变量,请使用以下命令(内置Bash variable)。
#!/bin/bash
show_date () {
date;
}
show_ls () {
ls -la;
}
if [[ $HOSTNAME = "mbp" ]]; then
show_ls;
elif [[ $HOSTNAME = "joe" ]]; then
show_date;
fi
实际上您没有提到主机名(我假设您必须在if条件下比较服务器名称,如果是这种情况,则必须创建一个名为hostname
的变量并将其值保留为命令hostname
,然后进行比较)。尝试关注并让我知道这是否对您有帮助。
#!/bin/bash
hostname=$(hostname)
show_date () {
date;
}
show_ls () {
ls -la;
}
if [[ "$hostname" = "mbp" ]]; then
show_ls;
elif [[ "$hostname" = "joe" ]]; then
show_date;
fi
答案 1 :(得分:-1)
shell不能像其他编程语言那样工作。密码是文字字符串,不是变量引用或子程序调用或类似的东西。因此,在hostname
条件下的if
是文字字符串hostname
,别无其他(您可以像使用mbp
和joe
那样用双引号引起来,此处不做任何更改;双引号主要用于让您在字符串内放置空格,同时使其保留为单个值而不是两个连续的值)。
无论如何,由于“主机名”与“ mbp”或“ joe”不是相同的字符串,因此if
的任何子句都不会执行。
如果hostname
是要比较其值的变量(从技术上来说是“ shell参数”),则需要使用$hostname
来获取该值。如果这是您要比较其输出的命令,则需要使用$(hostname)
来获得该输出:
if [[ $hostname == mbp ]]; then
或
if [[ $(hostname) == mbp ]]; then