При поиске монитора сети, который работает как внешний процесс и может обеспечить статистику для каждого подключения по числу переданных байтов, то IPTraf может сделать это.
Смотрите на снимки экрана в качестве примера, особенно TCP/UDP статистическая разбивка.
Можно заменить значением $i
в видеть точную команду Вы пытаетесь работать:
app4/ | sed -e "s/^.*\(.\)$/\1/"
Это не работает потому что app4/
не команда. Вы пытаетесь передать по каналу app4/
в sed
, таким образом, необходимо использовать что-то, что это производит app4/
:
echo app4/ | sed -e "s/^.*\(.\)$/\1/"
Это работает, но Вы не должны действительно использовать sed
для этого; bash
имеет довольно много инструментов обработки строк. Например, ${i#}
даст Вам длину $i
, и ${i:j}
даст Вам подстроку, запускающуюся в j
, так ${i:$((${i#}-1))}
даст Вам последний знак.
Самый легкий способ сделать, что Вы пробуете, вероятно, с ${i%/}
. Это возвратится $i
, но снимет изоляцию с a /
от конца, если существует тот:
$ i="app4"; echo ${i%/}
app4
$ i="app4/"; echo ${i%/}
app4
Таким образом:
if [ "${i%/}" = "$i" ]
then
echo "file"
else
echo "folder"
fi
Однако, если все, что Вы действительно хотите, должно знать если $i
действительный каталог, можно просто использовать:
if [ -d "$i" ]
Самый легкий способ проверить, ли переменные концы в/:
[[ $i = */ ]]
.. хотя, поскольку Johan сказал, можно просто проверить, существует ли это, и создайте его если нет. Это должно однако быть заключено в кавычки правильно:
if [[ ! -d $i ]]; then
mkdir -p "$i" || exit 1
fi
Мы не должны заключать расширения в кавычки внутри [[..]] который, наряду с его большей утилитой и скоростью, делает намного более хорошим использовать; мы определенно должны заключить параметр в кавычки к mkdir.
mkdir -p $i
, который ничего не делает, если это уже - каталог. – Keith Thompson 11.01.2012, 03:17