法1:(1)脚本要有可执行权限;(2)执行时要使用命令的绝对路径(当前路径的话是./脚本名)
[root@oldboy /]# cat /mnt/tar.sh
#!/bin/sh
tar cfz /www_html_$(date +%w).tar.sh /var/www/html >/dev/null
[root@oldboy ~]# ll /mnt/tar.sh
-rwxr-xr-x 1 root root 73 Dec 30 00:06 /mnt/tar.sh
[root@oldboy ~]# /mnt/tar.sh
tar: Removing leading `/' from member names
root@oldboy /]# ls
www_html_0.tar.sh
crontab -e
* * * * * /mnt/tar.sh > /dev/null
法2:使用shell解释器程序执行脚本
(1)指定shell解释器程序;(2)并不需要该文件具有可执行的属性
bash /mnt/tar.sh
法3:使用.或者soure运行脚本
在当前的shell中执行source或者.点号加载并执行相关脚本中的命令及语句,而不是产生一个子shell来执行脚本文件中的命令
[root@oldboy ~]# ll /mnt/tar.sh
-rw-r--r-- 1 root root 73 Dec 30 00:06 /mnt/tar.sh
[root@oldboy ~]# . /mnt/tar.sh
[root@oldboy ~]# cd /
[root@oldboy /]# ls
www_html_0.tar.sh
* * * * * /bin/bash /www.tar.sh > /dev/null
* * * * * /mnt/tar.sh > /dev/null
* * * * * /bin/bash /mnt/tar.sh > /dev/null
通过source或者.点号加载执行过的脚本,在脚本结束后脚本中的变量(包括函数)值在当前的shell中依然存在,而sh或者bash则不行。因此,在做shell脚本开发时,如果脚本中有需求引用其他脚本的内容或配置文件时,最好用.点号或source在脚本开头加载该脚本或配置文件,然后在下面的内容可以调用source加载的脚本及文件中的变量及函数等内容。