Если условие оператора не выполняется и сразу переходит к другой части - PullRequest
0 голосов
/ 28 марта 2019

мое состояние всегда не выполняется и заставляет его переходить к операторам else.

Пример: Джейм, Смит, 12,100009,2 Джек, Смит-Поттер, 9,19998,5, Хайме-Джейн, Смит, 8,92384,3имя, если это дефис и наиболее правильно, если две фамилии.затем класс, ID и 2-5 должны быть заменены школой.Например, 2 должны измениться на HS, 3 - на среднюю школу и так далее.Его начало от 2 до 5 и его сохранение в школе при передаче файла.

#!bin/bash
OLDIFS=$IFS
IFS=","

while read  First_Name Last_Name Grade Student_Id school
do  
#Keeps the first name before "-" 
FIRSTNAME=$(echo $First_Name | cut -d'-' -f 1)
#Keeps most left name
NAME=$(echo $FIRSTNAME | cut -d" " -f 1)
#Find the spaces between last name and if there are more than one space 
it makes it into one space.
LASTNAME=$(echo $Last_Name | sed -e 's/  */ /g')
other=$(echo $LASTNAME | cut -d' ' -f 2) 
last_Name=$(echo $other | cut -d'-' -f 2)

if [ $school == 2 ]
then
School=$(echo $school | sed -e 's/2/HS/g')
echo "$NAME"."$last_Name" "$NAME" "$last_Name" "$Grade"thGrade 
"$Student_Id" "$School"

elif [ $school == 3 ]
then
School=$(echo $school | sed -e 's/3/MI/g')
echo "$NAME"."$last_Name" "$NAME" "$last_Name" Class"..." 
"$Student_Id" "$School"

elif [ $school == 4 ]
 then
 School=$(echo $school | sed -e 's/4/MO/g')
 echo "$NAME"."$last_Name" "$NAME" "$last_Name" Class"..." 
 "$Student_Id" "$School"

else
 School=$(echo $school | sed -e 's/5/K/g')
 echo "$NAME"."$last_Name" "$NAME" "$last_Name" Class"..." 
"$Student_Id" "$School"

fi


done < $1  
IFS=$OLDIFS 

Условие не выполняется и оно переходит к оператору else.

Ответы [ 2 ]

1 голос
/ 28 марта 2019

некоторые исправления в вашем коде:

Используйте -eq вместо ==

if [[ $school -eq 2 ]]

Используйте это после того, как вы сделали:

done < <(echo "$1")

Ваш $NAME var не определен / не объявлен

ваш $last_Name переменная должна быть $Last_Name

Более того, вам лучше использовать оператор case:

case $school in 
2) do_something ;;
3) do_smth_else ;;
4) ... ;;
esac
0 голосов
/ 28 марта 2019

Там много дублирования.Вы можете рассчитывать на простой поиск в массиве вместо echo|sed

#!bin/bash

schools=("" "" HS MI MO K) # don't need index 0 or 1

while IFS="," read -r First_Name Last_Name Grade Student_Id school
do  
    case "$school" in
        [2-5]) School=${schools[$school]} 
            echo "$NAME"."$last_Name" "$NAME" "$last_Name" Class"..." "$Student_Id" "$School"
            ;;
        *) echo "Unknown school: $school"; ;;
    esac
done < $1   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...