Switch语句bash脚本无效

时间:2014-07-29 22:45:59

标签: bash jar switch-statement

有时候,当我运行代码时,它会在外部目录中运行。 但是,当我在另一个目录中移动它时,它最终无法正常工作(我使用绝对文件路径,因此它应该不是问题)

这是我尝试运行的代码:

#!/bin/bash

case "$1" in

"-h") 
    printf "\nHelp\n"
    printf  $"Stuff here.."
    ;;

"-c") 
    echo "The start time is $2"
    echo "The end time is $3"
    java -jar someJar.jar "$2" "$3";
    ;;
"-v")
    java -jar someJar.jar v;
    ;;
*) 
    java -jar someJar.jar;
    ;;

esac

printf "\n\n"

这是我得到的错误。奇怪的部分是我的文件名是run.sh,当我调用它时,我使用sh run.sh,但是下面的un.sh表示错误:

: command not found
'un.sh: line 3: syntax error near unexpected token `in
'un.sh: line 3: `case "$1" in

od -cx命令结果:

0000000   #   !   /   b   i   n   /   s   h  \r  \n  \r  \n   c   a   s
           2123    622f    6e69    732f    0d68    0d0a    630a    7361
0000020   e       $   1       i   n  \r  \n  \r  \n   "   -   h   "   )
           2065    3124    6920    0d6e    0d0a    220a    682d    2922
0000040      \r  \n  \t   p   r   i   n   t   f       "   \   n   H   e
           0d20    090a    7270    6e69    6674    2220    6e5c    6548
0000060   l   p   \   n   "  \r  \n  \t   p   r   i   n   t   f
           706c    6e5c    0d22    090a    7270    6e69    6674    2020
0000100   $   "   T   o       r   u   n       t   h   e       p   r   o
           2224    6f54    7220    6e75    7420    6568    7020    6f72

1 个答案:

答案 0 :(得分:1)

基于评论中的交换和更新的问题,似乎错误是由脚本中的dos样式行尾字符引起的。

DOS使用字符对\r\n标记文本文件中的行尾,而unix使用\n。有多种方法可以修复错误,但最简单的方法是在其上运行dos2unix,如下所示:

dos2unix run.sh

问题通常是由于在ASCII模式下将文件从unix复制到窗口,例如使用带有get的ASCII模式ftp,并以二进制模式复制回unix,例如使用{{ 1}}