Ошибка, скорее всего, происходит перед этим блоком кода. Например, если я поместил этот блок кода в свой собственный сценарий и echo
псевдонимы намечают:
#!/bin/bash
# example.bash
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
echo "alias ls='ls --color=auto'"
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
echo "alias grep='grep --color=auto'"
echo "alias fgrep='fgrep --color=auto'"
echo "alias egrep='egrep --color=auto'"
fi
Я получаю это:
$ ./example.bash
alias ls='ls --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
Который указывает, что это прекрасно.
Этот блок не имеет соответствия esac
.
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
....
I может быть неправильно понял замысел вашего скрипта, но не проще ли было бы построить массив, содержащий счетчики для каждого пользователя? что-то вроде
w | awk '
BEGIN{"date +%H:%M:%S" | getline tim};
NR > 2 {num[$1]++};
END {for (usr in num) print usr, num[usr], tim}
'
или
w | awk -v tim="$(date +%H:%M:%S)" '
NR > 2 {num[$1]++};
END {for (usr in num) print usr, num[usr], tim}
'
Ваша проблема в том, что usr
является унифицированным, и при первом проходе по циклу usr
не равен $1
, поэтому вы печатаете линию.
Можно добавить блок BEGIN
к коду awk:
BEGIN { usr = blank }
, а затем, внутри внутреннего if
, проверить это условие перед печатью:
...
{ if (usr != $1) {
if (usr != blank) { printf("%s\t%d\t%s\n",usr, num, tim); }
usr = $1;
num = 1 }
...