制作Bash模块化

时间:2014-10-24 14:04:21

标签: linux bash shell

我有一堆Bash脚本,他们各自使用以下内容:

BIN_CHATTR="/usr/bin/chattr"
BIN_CHKCONFIG="/sbin/chkconfig";
BIN_WGET="/usr/bin/wget";
BIN_TOUCH="/bin/touch";
BIN_TAR="/bin/tar";
BIN_CHMOD="/bin/chmod";
BIN_CHOWN="/bin/chown";
BIN_ECHO="/bin/echo";
BIN_GUNZIP="/usr/bin/gunzip";
BIN_PATCH="/usr/bin/patch";
BIN_FIND="/usr/bin/find";
BIN_RM="/bin/rm";
BIN_USERDEL="/usr/sbin/userdel";
BIN_GROUPDEL="/usr/sbin/groupdel";
BIN_MOUNT="/bin/mount";

有没有办法可以用这样的全局设置来创建一个Bash脚本,然后将它们包含在我想要运行的脚本中?

4 个答案:

答案 0 :(得分:3)

是的,您可以将所有这些变量放在" settings.sh"等文件中。然后在你的脚本中执行此操作:

source settings.sh

答案 1 :(得分:2)

您可以将变量保存在shell脚本中,然后获取该文件:

source /path/to/variables.sh

你应该实际使用.,它在bash中与源相同,但会提供更好的可移植性:

. /path/to/variables.sh

答案 2 :(得分:2)

你在寻找源命令吗?

mylib.sh:

#!/bin/bash
JAIL_ROOT=/www/httpd
is_root(){
   [ $(id -u) -eq 0 ] && return $TRUE || return $FALSE
}

test.sh

#!/bin/bash
# Load the  mylib.sh using source comamnd
source mylib.sh

echo "JAIL_ROOT is set to $JAIL_ROOT"

# Invoke the is_root() and show message to user
is_root && echo "You are logged in as root." || echo "You are not logged in as root."

btw - 使用rsync -a镜像带有+ x标志的脚本。

答案 3 :(得分:1)

是的,你可以。只需将变量和函数添加到文件中,使其可执行并在任何需要访问它们的脚本的顶部“执行”它。这是一个例子:

$ pwd
/Users/joe/shell

$ cat lib.sh 
#!/bin/bash
BIN_WGET="/usr/bin/wget"
BIN_MOUNT="/bin/mount"

function test() {
    echo "This is a test"
}

$ cat script.sh 
#!/bin/bash

. /Users/joe/shell/lib.sh

echo "wget=$BIN_WGET"

test


$ ./script.sh 
wget=/usr/bin/wget
This is a test