No se pueden comparar cadenas

No se pueden comparar cadenas

Google no me ayudó.

#!/bin/sh

j1=`expr "$1"`
j2=`expr "$2"`

while [ $j1 -le $j2 ]; do
    date=$(ncal -e $j1)
    month=$($date | cut -f1 -d' ')
    if [ $month=="April" ]; then
        echo $date
    fi
        j1=`expr $j1 + 1`
done

Quiero imprimir la fecha de Semana Santa solo para los años en los que está en el mes de abril (en el rango entre los dos años que pasé como argumentos). Pero de alguna manera obtengo el resultado:

...

April 5 2015
./script.sh: 8: March: not found
March 27 2016
./script.sh: 8: April: not found
April 16 2017

¿Qué significa "mes: no encontrado"? ¿Y por qué imprime marzo aunque solo pido abril?

Lo intenté de varias maneras y siempre hubo algún error.

También necesito agregar la condición de que solo se impriman aquellas fechas que sean posteriores al 20 de abril, pero ni siquiera puedo manejar esto.

Respuesta1

En la línea

month=$($date | cut -f1 -d' ')

ejecuta lo que sea que esté $datecomo comando y canaliza su salida a cut.

creo que quieres

month=$( printf '%s\n' "$date" | cut -f 1 -d ' ' )

aquí.

Además, no mezcle comillas invertidas y $(...)en el mismo guión, es confuso. Solo úsalo $(...)en su lugar.

La comparación de cadenas se realiza con =:

if [ "$month" = "April" ]; then

Asegúrese de citar dos veces sus variables. VerImplicaciones de seguridad de olvidarse de citar una variable en shells bash/POSIX

La aritmética de números enteros se puede hacer usando $(( expression )). expres anticuado.

j1=$(( "$1" ))
j2=$(( "$2" ))

...

j1=$(( j1 + 1 ))

información relacionada