Author Topic: Ошибка в скрипте  (Read 4724 times)

0 Members and 1 Guest are viewing this topic.

Offline Comrad

  • Jr. Member
  • **
  • Posts: 77
  • Karma: +0/-0
Ошибка в скрипте
« on: May 14, 2006, 22:20:09 »
Здравствуйте.
Набросал скрипт для поиска файлов в RPM-пакетах

Code: [Select]
#!/bin/sh
set -x
find_file()
{
#set +x
    RPM_PATH="/mnt/iso/ASPLinux-11-d$INSTALL_DISK/ASPLinux/RPMS"
set +x    
    for i in `ls $RPM_PATH/*.rpm`; do
    TEMP_STRING=`rpm -qpl $i | grep $FILE_NAME`
    if [ -n "$TEMP_STRING" ]; then
        echo "$TEMP_STRING"
        echo -e "\t in $i"
    fi
    done
}

if [ -z "$1" ]; then
    echo "No string input."
    exit
fi

FILE_NAME="$1"

if [ -z "$2" ]; then
    INSTALL_DISK="0"
else
    INSTALL_DISK="$2"
fi

echo "$INSTALL_DISK"

case "$INSTALL_DISK" in
    0)
    for $INSTALL_DISK in 1 2 3 4; do
        find_file
    done
   ;;
    1|2|3|4)
    find_file
   ;;
    *)
    echo "ERROR"
   ;;
esac
Скрипт принимает два параметра - фрагмент имени файла и номер диска (смонторованые iso).
При использовании номера диска 1, 2, 3 или 4 все работает нормально.
Но при использовании 0 (все диски) появляется ошибка (так же использовал 5, all, ...):
Code: [Select]
root@niko:# ./find_rpm abc 0
+ '[' -z abc ']'
+ FILE_NAME=abc
+ '[' -z 0 ']'
+ INSTALL_DISK=0
+ echo 0
0
./find_rpm: line 45: `$INSTALL_DISK': not a valid identifier
Пробовал на ASPLinux-11 и на SW-10 не работает одинаково.
Подскажите в чем ошибка.
Кто понял жизнь, тот не торопится.

Offline demiurg

  • Hero Member
  • *****
  • Posts: 1014
  • Karma: +0/-0
    • http://larin.tomsk.ru
Ошибка в скрипте
« Reply #1 on: May 14, 2006, 23:51:52 »
Quote from: Comrad
Здравствуйте.
Набросал скрипт для поиска файлов в RPM-пакетах
....
./find_rpm: line 45: `$INSTALL_DISK': not a valid identifier
[/code]
Пробовал на ASPLinux-11 и на SW-10 не работает одинаково.
Подскажите в чем ошибка.
Чего только люди не придумают чтобы yum или apt-get не использовать

Offline Wut

  • Newbie
  • *
  • Posts: 36
  • Karma: +0/-0
Ошибка в скрипте
« Reply #2 on: May 15, 2006, 17:30:01 »
Я вообще не спец, но может переменные используемые в case не могут менять своего значения внутри дествия этого case? попробуй так
Code: [Select]
#!/bin/sh
set -x
find_file()
{
#set +x
    RPM_PATH="/mnt/iso/ASPLinux-11-d$INSTALL_DISK/ASPLinux/RPMS"
set +x    
    for i in `ls $RPM_PATH/*.rpm`; do
    TEMP_STRING=`rpm -qpl $i | grep $FILE_NAME`
    if [ -n "$TEMP_STRING" ]; then
        echo "$TEMP_STRING"
        echo -e "\t in $i"
    fi
    done
}

if [ -z "$1" ]; then
    echo "No string input."
    exit
fi

FILE_NAME="$1"

if [ -z "$2" ]; then
    INSTALL_DISK="0"
else
    INSTALL_DISK="$2"
fi

echo "$INSTALL_DISK"

TEMP_VAR = $INSTALL_DISK
case "$TEMP_VAR" in
    0)
    for $INSTALL_DISK in 1 2 3 4; do
        find_file
    done
  ;;
    1|2|3|4)
    find_file
  ;;
    *)
    echo "ERROR"
  ;;
esac
« Last Edit: May 15, 2006, 17:30:53 by Wut »
Si vis pacem -- para belum

Offline demiurg

  • Hero Member
  • *****
  • Posts: 1014
  • Karma: +0/-0
    • http://larin.tomsk.ru
Ошибка в скрипте
« Reply #3 on: May 15, 2006, 18:48:52 »
Quote from: Wut
Я вообще не спец, но может переменные используемые в case не могут менять своего значения внутри дествия этого case? попробуй так
Я автору темы посоветовал бы прочитать http://ruslandh.narod.ru/howto_ru/Bash-Pro...og-Intro-8.html
Глобальные переменные это вообще плохой стиль программирования, на чем бы программа не писалась.
Code: [Select]
#!/bin/sh
find_file()
{
    RPM_PATH="/mnt/iso/ASPLinux-11-d$1/ASPLinux/RPMS"
    for i in `ls $RPM_PATH/*.rpm`; do
    TEMP_STRING=`rpm -qpl $i | grep $FILE_NAME`
    if [ -n "$TEMP_STRING" ]; then
        echo "$TEMP_STRING"
        echo -e "\t in $i"
    fi
    done
}

if [ -z "$1" ]; then
    echo "No string input."
    exit
fi

FILE_NAME="$1"

if [ -z "$2" ]; then
    INSTALL_DISK="0"
else
    INSTALL_DISK="$2"
fi

echo "$INSTALL_DISK"

case "$INSTALL_DISK" in
    0)
    for I in 1 2 3 4; do
        find_file $I
    done
 ;;
    1|2|3|4)
    find_file $INSTALL_DISK
 ;;
    *)
    echo "ERROR"
 ;;
esac
Что-то вот в этом духе....

Offline Comrad

  • Jr. Member
  • **
  • Posts: 77
  • Karma: +0/-0
Ошибка в скрипте
« Reply #4 on: May 15, 2006, 19:01:04 »
Quote from: demiurg
Чего только люди не придумают чтобы yum или apt-get не использовать
Хочу поближе познакомиться с содержимым пакетов. Поэтому приходится руками обходиться.
Кто понял жизнь, тот не торопится.

Offline Comrad

  • Jr. Member
  • **
  • Posts: 77
  • Karma: +0/-0
Ошибка в скрипте
« Reply #5 on: May 15, 2006, 19:12:04 »
Спасибо за ссылку.

Дело оказалось в $ перед INSTALL_DISK в конструкции for.
Убрал и все закрутилось.

Спасибо всем ответившим.
Кто понял жизнь, тот не торопится.