意外标记'done'附近的语法错误-Shell脚本

时间:2019-01-10 15:11:28

标签: shell

#!/bin/sh
VAR2=0
while [ $VAR2 -eq 0 ]: do
    echo "Please choose one of the following options:"
    echo "1. List the current running processes"
    echo "2. Check the available free memory"
    echo "3. List the disks/partitions"
    echo "4. Check for hardware (PCI)"
    echo "5. Check for package installation"
    echo "6. Create multiple files"
    echo "7. Remove multiple files"
    echo "8. List the contents of the current directory"
    echo "0. Exit"
    read VAR1
    if [ $VAR1 -eq 0 ]; then
        VAR2=2
    fi
    if [ $VAR1 -eq 1 ]; then
        $(top)
    fi
    if [ $VAR1 -eq 2 ]; then
        $(free)
    fi
    if [ $VAR1 -eq 3 ]; then
        $(df)
    fi
    if [ $VAR1 -eq 4 ]; then
        echo "Insert the name of the hardware that you want to search:" read VARHARD $(sudo lspci | grep $VARHARD)
    fi
    if [ $VAR1 -eq 5 ]; then
        echo "Insert the name of the package that you want to search:" read VARPACK $(rpm -qa | grep VARPACK)
    fi
    if [ $VAR1 -eq 6 ]; then
        echo "Insert the base name of the files:" read VARFILE echo "Insert the amount of files you want:" read VARNUMB $(touch $VARFILE{0001..000$VARNUMB})
    fi
    if [ $VAR1 -eq 7 ]; then
        echo "Insert a string to delete all files that contain it:" read VARDEL $(find -type f -name '*$VARDEL*' -exec rm {} \;)
    fi
    if [ $VAR1 -eq 8 ]; then
        $(ls -la)
    fi
    echo "Press any key and enter to continue... "
    read teste
    done

因此,当我尝试运行脚本“ sh script.sh”时,它给我一个错误,提示“意外令牌“令牌”附近的语法错误”

有人可以向我解释错误吗?我是脚本新手。

谢谢!

2 个答案:

答案 0 :(得分:0)

为什么要使用语法$(top)?这将执行top至完成(可能会长时间运行,并且永远不会结束),然后将输出作为命令评估并尝试执行它。 top的输出很可能是无效的Shell语法。我不确定是哪个命令正在生成与token相关的语法错误,但这可能是错误的根源。代替$(top),只需写top。脚本中$()的所有其他实例相同。

答案 1 :(得分:0)

您的代码中有两个问题,第一个是在不适当的地方调用子shell(使用$()),第二个是第26行的错字(您有if而不是fi)。以下更正的代码有效:

#!/bin/bash
VAR2=0
while [ $VAR2 -eq 0 ]; do
 echo "Please choose one of the following options:"
 echo "1. List the current running processes"
 echo "2. Check the available free memory"
 echo "3. List the disks/partitions"
 echo "4. Check for hardware (PCI)"
 echo "5. Check for package installation"
 echo "6. Create multiple files"
 echo "7. Remove multiple files"
 echo "8. List the contents of the current directory"
 echo "0. Exit"
 read VAR1
 if [ $VAR1 -eq 0 ]; then
      VAR2=2
 fi
 if [ $VAR1 -eq 1 ]; then
      top
 fi
 if [ $VAR1 -eq 2 ]; then
      free
 fi
 if [ $VAR1 -eq 3 ]; then
      df
 fi
 if [ $VAR1 -eq 4 ]; then
      echo "Insert the name of the hardware that you want to search:"
      read           VARHARD
      sudo lspci | grep $VARHARD
 fi
 if [ $VAR1 -eq 5 ]; then
      echo "Insert the name of the package that you want to search:"
      read VARPACK
      rpm -qa | grep VARPACK
 fi
 if [ $VAR1 -eq 6 ]; then
      echo "Insert the base name of the files:"
      read VARFILE
      echo "Insert the amount of files you want:"
      read VARNUMB
      touch $VARFILE{0001..000$VARNUMB
 fi
 if [ $VAR1 -eq 7 ]; then
      echo "Insert a string to delete all files that contain it:"
      read VARDEL
      find -type f -name '*$VARDEL*' -exec rm {} \;
 fi
 if [ $VAR1 -eq 8 ]; then
      ls -la
 fi
 echo "Press any key and enter to continue... "
 read teste
done