LinuxForum.Fans
Тема

Поведение скрипта,в зависимости от метода запуска

Автор: Ampermetr 12 сообщений 1568 просмотров
16.03.2015 21:30 #418183

Слепил вот такой скрипт:

text

#! /bin/bash
count=${7}
while [ $count -t 10 ]; do
echo name is $RANDOM
let RANDOM=RANDOM++
done
FILENAME=${RANDOM}1.txt
cd /home/user/Desktop/новая
touch ${FILENAME}

Будучи запущенным в терминале скрипт создает файл 1.txt, при повторном запуске файл перезаписывается.
При запуске даблкликом с рабочего стола скрипт создает файлы типа 529035.txt, то есть в какой то момент срабатывает переменная RANDOM
В чем может быть причина такого поведения?



//не забываем пользоваться BBCode
diablopc
16.03.2015 21:44 · отредактировано #418186

А у меня и в консоли создаёт файлы со случайным числом в качестве имени (ну и единичка в конце).

16.03.2015 21:54 #418189

Я запускаю на восьмом дебиане, сейчас попробую в виртуалках потыкать.

16.03.2015 22:22 #418193

Напишите лучше ТЗ, и вам покажут, как делать правильно.

16.03.2015 22:45 #418198

Изначальная задача у меня была скриптом создать файл с рандомным именем. Грубо говоря взял первый попавшийся похожий скрипт, подпилил и теперь он создает файлы.
Правильный (может не совсем)скрипт я уже написал,

Показать
text
#! /bin/bash
MAX=6
count=1
  while [ "$count" -le $MAX ];
  do
    NUMBER=$RANDOM
    echo $NUMBER
    let count+=1
   done
 echo $NUMBER
FILENAME=${NUMBER}.txt
  cd /home/user/Desktop/новая
touch ${FILENAME}

Сейчас больше интересует почему первый скрипт выдает разные результаты.

16.03.2015 22:48 #418199
"Ampermetr" написал:
Изначальная задача у меня была скриптом создать файл с рандомным именем.

[console]touch $RANDOM[/console]
Скрипт-то зачем? *ROFL*

16.03.2015 22:50 #418200

Ну кто ж знал :D

17.03.2015 00:16 #418222
"Ampermetr" написал:
создать файл с рандомным именем

Файл временный, как я полагаю? Тогда можно воспользоваться mktemp(1).

17.03.2015 07:48 · отредактировано #418238
"Ampermetr" написал:
let RANDOM=RANDOM++

не нужно этой переменной ничего присваивать. Она после присваивания начинает выдавать одно и то же.

Ну и конечно погуглите, что значит ++ (инкремент), узнаете много нового.

"Ampermetr" написал:
while [ "$count" -le $MAX ];

ну кто так пишет?!

text
while (( count <= MAX ))

либо вообще так:

text
for (( count=1; count <=MAX; count++ ))

Впрочем, мне непонятно, на кой ляд здесь вообще цикл?

"Ampermetr" написал:
cd /home/user/Desktop/новая

надо

text
cd "$HOME/Desktop/Новая Папка/"
17.03.2015 14:58 #418269

Проверил в трех виртуальных машинах, нигде результат выполнения не зависит от того, как запускать скрипт. Получается проблема в самой оболочке shell на этом компьютере?

17.03.2015 15:09 #418272
"Ampermetr" написал:
Получается проблема в самой оболочке shell на этом компьютере?

проблема в руках из задницы.

17.03.2015 15:18 #418276

В этом я и изначально не сомневался))

Войдите или зарегистрируйтесь, чтобы ответить.