Tomsk Sysadmins Forum
Unix => Программирование => Topic started by: Comrad on May 14, 2006, 22:20:09
-
Здравствуйте.
Набросал скрипт для поиска файлов в RPM-пакетах
#!/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, ...):
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 не работает одинаково.
Подскажите в чем ошибка.
-
Здравствуйте.
Набросал скрипт для поиска файлов в RPM-пакетах
....
./find_rpm: line 45: `$INSTALL_DISK': not a valid identifier
[/code]
Пробовал на ASPLinux-11 и на SW-10 не работает одинаково.
Подскажите в чем ошибка.
Чего только люди не придумают чтобы yum или apt-get не использовать
-
Я вообще не спец, но может переменные используемые в case не могут менять своего значения внутри дествия этого case? попробуй так
#!/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
-
Я вообще не спец, но может переменные используемые в case не могут менять своего значения внутри дествия этого case? попробуй так
Я автору темы посоветовал бы прочитать http://ruslandh.narod.ru/howto_ru/Bash-Pro...og-Intro-8.html (http://ruslandh.narod.ru/howto_ru/Bash-Prog-Intro/Bash-Prog-Intro-8.html)
Глобальные переменные это вообще плохой стиль программирования, на чем бы программа не писалась.
#!/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
Что-то вот в этом духе....
-
Чего только люди не придумают чтобы yum или apt-get не использовать
Хочу поближе познакомиться с содержимым пакетов. Поэтому приходится руками обходиться.
-
Спасибо за ссылку.
Дело оказалось в $ перед INSTALL_DISK в конструкции for.
Убрал и все закрутилось.
Спасибо всем ответившим.