什么是bash脚本?

时间:2014-03-17 10:21:40

标签: linux bash shell sh csh

我需要帮助理解bash脚本。此bash脚本自动从特定文件夹结构中的文本文件生成cron作业行。

#!/bin/bash

LOGFILE="/home/test/logs/buildCron.log"
CTLOGFILE="/home/test/logs/cronOutput.log"
CURCRONTAB="/home/test/logs/cronTab.current"
CTARCHIVE="/home/test/logs/archive"
NEWCRONTAB="/home/test/logs/cronTab.proposed"
MYCRON="*/5 * * * * /home/test/scripts/buildCron.sh >> $LOGFILE 2>&1"

# Dump old and prepare new crontab files
umask 077
echo "`date`: Starting buildCron"                                        | tee -a $LOGFILE
echo "$MYCRON" > $NEWCRONTAB
crontab -l > $CURCRONTAB
echo "`date`: Current (Active) Crontab dumped to: $CURCRONTAB"           | tee -a $LOGFILE

# Append crontab-entries listed in cronjob.txt files to new crontab file
CRONS="`find /home/test/scheduled_scripts -type f -name cronjob.txt`"
for CRON in $CRONS
do
   echo "`date`: Processing CronFile: $CRON"
   DIRPARAMETER="`dirname $CRON`"
   CRONENTRY="`cat $CRON` $DIRPARAMETER >> $CTLOGFILE 2>&1"
   echo "$CRONENTRY" >> $NEWCRONTAB
done                                                                     | tee -a $LOGFILE

Q1)

中的>> $LOGFILE 2>&1是什么
MYCRON="*/5 * * * * /home/test/scripts/buildCron.sh >> $LOGFILE 2>&1"?

我认为第一部分>> $LOGFILE意味着将输出写入变量$ LOGFILE中的文件路径。但是变量声明会产生输出吗?因为MYCRON=是变量的声明吗?为什么有两个箭头而不是echo "$MYCRON" > $NEWCRONTAB

中的箭头

Q2) 在

echo "`date`: Starting buildCron"

单词日期周围的单个引号是什么?他们为什么只围绕这个词约会?是否可能意味着在那里执行一个名为date的命令?

Q3) 在

CRONENTRY="`cat $CRON` $DIRPARAMETER >> $CTLOGFILE 2>&1"

什么是

`cat $CRON`

在做什么?

我理解cat,将两个文件连接成一个,但是代码似乎只在命令cat之后只编写一个文件名。所以我不明白哪两个文件正在连接......这部分还在做什么? $DIRPARAMETER >> $CTLOGFILE 2>&1数字2和& 1是什么?

Q4) umask 077做了什么?它是否为将在此.sh文件中生成的所有文件建立权限?如果我想在同一个shell脚本中生成具有不同权限的文件,该怎么办?

如果问题是婴儿的话,谢谢你。这是我读过的第一个bash脚本......

2 个答案:

答案 0 :(得分:1)

A1:假设$LOGFILE包含文件名,>> $LOGFILE 2>& 命令的标准输出附加到该文件,再加上重定向标准错误到标准输出(即将其写入日志文件)。

A2:反引号(也可以写为$())正在执行给定的命令,并将反引号短语替换为命令的输出(在您的情况下,将当前日期放入{ {1}}行)。

A3:我会传递那个,我必须测试一下,我不会写出需要超过一分钟才能打字的答案。 ; - )

A4:这使得生成的所有文件都删除了所有“组”和“其他”权限,即仅保留使用的权限。这是脚本生成的文件的默认值;您始终可以通过echo明确设置权限。

单个问题有点太多了。通过孤立地提问,你可能会更好。

答案 1 :(得分:1)

  1. >>附加到文件(而不是>会覆盖到文件) 2>& 1表示它写入所有输出,包括stdout和stderr。如果这没有任何意义,只需理解它就意味着写下所有输出

  2. 后面的滴答声是指运行命令并给我输出,在这种情况下是日期

  3. 反叛cat cron说要运行文件的输出。可以把它想象一下在文件内容上调用eval

  4. 用户的权限设置