BashスクリプトはCentos 7で完全に実行されますが、Ubuntu Bionicでは失敗します。

BashスクリプトはCentos 7で完全に実行されますが、Ubuntu Bionicでは失敗します。

以下のスクリプトを見つけてください

if [ "$#" -eq 0 ]; then
  dbs=('test_db_1' 'test_db_2') 
  path='/var/backups/'
else
  dbs=( "$@" )
  path='/app/mybackups/'
fi
dbuser='test_user_name'
dbpassword='test_pass_word'
now="$(date +'%d-%m-%Y_%T')"
currentDate="$(date)"
dayToSubtract=365
cd ${path}
echo "location: $path"
for element in ${dbs[@]}
        do
                echo $element
                echo "Starting backup now for db: $element on $now"
                mongodump -u ${dbuser} -p ${dbpassword} --authenticationDatabase 'admin' -d $element --gzip --archive=${element}_$now.archive
                dateToBeRemoved=$(date --date="${currentDate} -${dayToSubtract} day" +%d-%m-%Y)
                echo $dateToBeRemoved
                fileToBeRemoved="${element}_${dateToBeRemoved}"
                echo Removing $fileToBeRemoved
                rm $fileToBeRemoved*
        done
echo All Done!
echo "location: $path"

私はこのスクリプトを毎年サーバーのデータベースをバックアップするために毎年使用してきましたが、スクリプトにコマンドライン引数を渡して手動バックアップを実行するためにも使用しました。

私は最近Ubuntuを使用して新しいサーバーを入手しましたが、次のエラーが発生しました。

daily.sh: 2: daily.sh: Syntax error: "(" unexpected (expecting "fi")

参考までに、以下のスクリーンショットを参照してください。

ここに画像の説明を入力してください。

追加後:

#!/usr/bin/env bash

ここに画像の説明を入力してください。

同じエラーが発生しました。

ここに画像の説明を入力してください。

どのbashを実行すると、次のようになります。

ここに画像の説明を入力してください。

bashの結果に基づいてshebangを追加しましたが、まだ同じ問題が発生します。 ここに画像の説明を入力してください。

現在のフォルダで実行している場合:

ここに画像の説明を入力してください。

BOM確認:

ここに画像の説明を入力してください。

Ubuntuについて: 出版社ID:Ubuntu説明:Ubuntu 18.04.3 LTSバージョン:18.04コード名:bionic

ベストアンサー1

スクリプトの最初の行にshebangを追加します。(
コメントから)

#!/usr/bin/env bash 

または道を知っている場合。

#!/bin/bash

または

#!/usr/bin/bash

どこにいても構いません。

おすすめ記事