Filter and Execution in Shell Script

-1

I have a problem in Shell Script , where:

  • Need to report a file;
  • Check if it is a .C , .JAVA file or both
  • If it is one of the two, compile as chosen and execute;

(I do not understand much of Shell and I had this doubt)

#!/bin/sh

dialog --backtitle "Código FOnte" --title "Menu" --menu "Selecione " 0 0 6 \
  1 "Exibir status das utilizações das partições" \
  2 "Relação de usuários logados " \
  3 "Informe um arquivo e receba sua informação em bytes " \
  4 "Passe um programa em C ou java e execute " 2>/tmp/menuitem.$$
  menuitem='cat /tmp/menuitem.$$'

  opt=$?

 case $menuitem in
  1) df -h > /tmp/item.1 && dialog --textbox /tmp/item.1 20 80  ;;
  2) who > /tmp/item.2 && dialog --textbox /tmp/item.2 20 80  ;;
  3) dialog --inputbox 'Digite caminho e o arquivo :' 0 0  2>/tmp/nome.txt
     caminho=$( cat /tmp/nome.txt )
     arquivo=$( ls -lh $caminho | awk '{print $9 "------------------------------------->" $5}') ;;
  4) ;;
esac
    
asked by anonymous 16.06.2016 / 14:06

2 answers

0

You can check the file extension based on its last characters, as in the example below, where I check the last 4 characters:

#!/bin/bash


echo "qual o arquivo?"
read arquivo

if [ ${arquivo: -4} == ".txt" ]; then
    echo "arquivo tipo txt"
elif [ ${arquivo: -4} == ".doc" ]; then
    echo "arquivo tipo doc"
else
    echo "arquivo invalido"
fi
    
16.06.2016 / 14:47
0

I follow the previous answer, just add a few more things:

#!/bin/bash

echo "qual o arquivo?"
read arquivo

# testa se é um arquivo regular    
if [ ! -f "${arquivo}" ] ; then
   echo "${arquivo}" não encontrado
   exit 1
fi


# método1: obtenção da extensão diretamente na atribuição de variável
extensao=${arquivo##*.}

# se não funcionar no teu shell, utilize este outro código
# método2: obtenção da extensão com ajuda do awk
# extensao='echo ${arquivo} | awk -F "." '{print $NF;}''

# conversão para minuscula
extensao='echo "${extensao}" | tr 'A-Z' 'a-z''

# tratamento do arquivo
if [ "${extensao}" == "c" ]; then
    echo "arquivo C"
    # rode um teste de compilação C
elif [ "${extensao}" == "java" ]; then
    echo "arquivo java"
    # rode um teste de compilação java
else
    echo "arquivo invalido"
fi

Note that it is interesting to normalize the case of extensions so that you do not have to test uppercase and lowercase. What may have given the error is that commands like this ${arquivo: -4} are not supported in the /bin/sh shell, there is another option to do in awk (commented command).

The dialog (or whiptail no debian) command is interesting for generating dialogues (menus, sim- no, etc.) but I also find it unnecessary for the problem.

    
16.06.2016 / 17:42