制作从命令行读取参数的脚本

时间:2017-03-09 13:24:48

标签: bash arguments

我正在通过提供命令molcas -f file.input来运行量子化学计算。我现在需要将molcas -f放入一个脚本中,该脚本也tail生成的file.log的最后100行,让我快速确认一切都按照它的方式完成至。所以我想运行脚本run.sh

#!/bin/bash

molcas -f [here read the file.input from command line]
tail -100 [here read the file.log]

问题是如何让脚本读取我给出的参数,然后找到自己的输出文件(具有相同的文件名,但具有不同的扩展名)。

后续

说我有一堆编号的文件file-1, file-2, ..., file-n。如果我不是跑步,我会节省时间

./run.sh file-1.input file-1.log

我跑

./run.sh n n

./run.sh n.input n.log

假设脚本中给出了数字n的实际文件名和位置。可以这样做吗?

2 个答案:

答案 0 :(得分:1)

使用此代码:

#!/bin/bash
molcas -f "$1"
tail -100 "$2"

您需要按如下方式执行脚本run.sh:

./run.sh file.input file.log

答案 1 :(得分:0)

我要对molcas一无所知,所以我向this side致以获得基本的理解。

语法看起来像这样......

#!/bin/bash

# waiting for input
read -p "Enter a filename (sample.txt): " FILE

# checking for existing file
if [ -e "$FILE" ]; then
    read -p "Enter a command for moculas: " CMD
else
    echo "Sorry, \"${FILE}\" was not found. Exit prgramm."
    exit 1
fi

# I am not sure how this command works.
# maybe you have to edit this line by your self.
molcas  $FILE -f "$CMD"

# checking for programm-errors
ERRNO=$?
if [ "$ERRNO" != "" ] && [ "$ERRNO" -gt 0 ]; then
    echo "Molcas returned an error. Number: ${ERRNO}"
    exit 1
fi


# cuts off the fileending (For example: sample.txt gets sample)
FILENAME="${FILE%.*}"

# checking other files
ERRFILE="${FILENAME}.err"
tail -n 100 $ERRFILE

LOGFILE="${FILENAME}.log"
tail -n 100 $LOGFILE


exit 0

我会发布更多内容,但不清楚如何处理这些数据。

希望这有点帮助。