シェルスクリプトは次のとおりです。
#!/bin/bash
while [ true ]; do
clear
date
who
sleep 5
done
intを実行すると、次のような結果が得られます。
yuikus@DESKTOP-VTJ0OG4:~$ cd /mnt/d/lab_oc_1/lab_oc_2/
yuikus@DESKTOP-VTJ0OG4:/mnt/d/lab_oc_1/lab_oc_2/$ sh bag.sh
bag.sh: 7: Syntax error: "done" unexpected (expecting "do")
yuikus@DESKTOP-VTJ0OG4:/mnt/d/lab_oc_1/lab_oc_2/$ bash bag.sh
bag.sh: line 7: syntax error near unexpected token `done'
bag.sh: line 7: `done '
なぜ動作しないのですか?私はWindowsでUbuntuを実行しています。
答え1
WindowsでUbuntuを実行しているので、おそらくWindowsとLinuxの両方のエディタを使用してスクリプトを編集します。ただし、WindowsとLinuxでは異なる行ターミネータが使用されるため、スクリプトインタプリタが混乱する可能性があります。
dos2unix
スクリプトファイルを実行すると、Windows(CR-LF)行末がUnix行末に置き換えられます。
$ dos2unix bag.sh
次に、元の意図したとおりにスクリプトを実行します。#!
-line宣言があるので、/bin/bash
スクリプトを実行可能にし、次のように実行する方が合理的です。
$ ./bag.sh
Bashで実行する代わりに、目的のシェル以外のsh
シェルを使用することもできます。