如何正确调用bash函数

时间:2018-06-23 11:31:50

标签: bash shell

我现在正在学习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'函数。有什么想法吗?

2 个答案:

答案 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,别无其他(您可以像使用mbpjoe那样用双引号引起来,此处不做任何更改;双引号主要用于让您在字符串内放置空格,同时使其保留为单个值而不是两个连续的值)。

无论如何,由于“主机名”与“ mbp”或“ joe”不是相同的字符串,因此if的任何子句都不会执行。

如果hostname是要比较其值的变量(从技术上来说是“ shell参数”),则需要使用$hostname来获取该值。如果这是您要比较其输出的命令,则需要使用$(hostname)来获得该输出:

if [[ $hostname == mbp ]]; then

if [[ $(hostname) == mbp ]]; then