$var ps -aux | grep -e test -e idk | awk '{print $2 " " $11}'
- неправильный способ присвоения переменной с помощью вывода команды. Должно быть
var=$(ps -aux | grep -e test -e idk | awk '{print $2 " " $11}')
Нет необходимости использовать grep
при использовании awk
, поскольку он может самостоятельно сопоставлять шаблоны.
var=$(ps -aux | awk '/test|idk/ {print $2 " " $11}')
Вам необходимо добавить done
в ваш цикл for
и перейти к правильной переменной. Вы также не должны выходить из цикла.
for name in "${NAMES[@]}"; do
kill -9 "$name"
done ;;
Но ваш массив $NAMES
содержит чередующиеся PID и команды, вы должны только передавать PID в kill
. Так что цикл должен быть:
for ((i=0; i < ${#NAMES[@]}; i+=2)); do
kill -9 "${NAMES[i]}"
done
Вы не должны иметь break
в случае [Nn]*)
. Вы можете использовать break
только внутри цикла.
Исправленный скрипт должен быть:
#!/bin/bash
echo "CyPat Script by Valaire"
echo " ~scetchy processes~"
var=$(ps -aux | awk '/test|idk/ {print $2 " " $11}')
IFS=' '
NAMES=($var)
echo "${NAMES[@]}"
read -p "Kill all? " yn
case $yn in
[Yy]* )
for ((i=0; i < ${#NAMES[@]}; i+=2)); do
kill -9 "${NAMES[i]}"
done;;
[Nn]* ) echo no;;
*) echo "y or n";;
esac
Также не стоит давать имена переменных в верхнем регистре. Они обычно зарезервированы для переменных среды, и ваша переменная может конфликтовать.