почему Bash не складывает мои переменные вместе?

Из руководства fstab по моей системе:

Четвертое поле, fs_mntops, описывает параметры монтирования, связанные с файловой системой. Он отформатирован как список параметров, разделенных запятыми. Он содержит как минимум тип монтирования (см. fs_type ниже) плюс любые дополнительные параметры, соответствующие типу файловой системы. [...]

Если fs_type равно «rw», «rq»,или "ро" то файловая система, имя которой указано в поле fs_file, обычно смонтирован для чтения-записи или только для чтения в указанном специальном файле. Если fs_type — «sw», тогда специальный файл становится доступным как часть пространство подкачки с помощью команды swapon(8) в конце перезагрузки системы процедура.

Таким образом, sw используется, чтобы сообщить swapon (или swapctl в моей системе), что это допустимый кандидат для использования в качестве пространства подкачки, которое будет быть добавлены как часть процедуры запуска системы.

Из руководства, описывающего swapctl -A :

Эта опция заставляет swapctl читать файл /etc/fstab для устройств и файлы с типом «sw» и добавляет все эти записи в качестве устройств подкачки. Если устройства подкачки не настроены, swapctl завершится с кодом ошибки.

Это в OpenBSD. В системе Ubuntu Linux, к которой у меня есть доступ, ни в одном руководстве не упоминается sw как вариант монтирования для подкачки по какой-то причине.

0
31.01.2017, 03:52
2 ответа

Вы должны предоставить немного больше информации, например, содержимое файла, на который указывает $tempFile. Тогда я смог бы помочь больше.

cat $tempFile|while read line
do  
  sum=0
  count=0
  average=0
  median=0

  #read each line, sort it and put it into tempRows file
  echo "$line" >> $tempRow
  sort $tempRow

  #add each number to the sum for avg calculation
  for i in $(cat $tempRow)
  do
    count+=1
    echo "count: $count"
    sum+=$i
    echo "sum: $sum"    
  done

  #perform and print average calc at the end of each line
  average=$((sum / count))

  echo "$average"

  rm -f $tempRow
done
0
28.01.2020, 02:25

Запустите bash -x myscript. Это даст вам трассировку выполнения, которая должна прояснить проблемы.

Ваша основная проблема заключается в том, что

for i in $tempRow

Переменная $tempRow содержит имя файла. Если предположить, что имя файла не содержит пробелов или символов подстановки, то $tempRow расширяется до списка из одного слова, которое является именем файла. Таким образом, тело цикла for выполняется один раз, при этом i устанавливается на имя файла.

Похоже, что вы хотите перебирать строки файла. Для этого используйте while read. Или, скорее, while IFS= read -r i; do ....

Несколько дополнительных советов:

4
28.01.2020, 02:25

Теги

Похожие вопросы