変数内の空白の扱いについて

もう一つ今日は嵌ってたことがあってそれが下記

$ echo $MAC1
11:22:33:44:55:66
$ echo $MAC2
11:22:33:44:55:66
$ if [ $MAC1 == $MAC2 ]; then
> echo hoge
> fi
hoge
$

この続きで

$ if [ "$MAC1" == "$MAC2" ]; then
> echo hoge
> fi
$

???

ってなっててこれも結構悩むんだけど

$ echo "hoge"$MAC1"fuga"
hoge11:22:33:44:55:66fuga
$ echo "hoge"$MAC2"fuga"
hoge11:22:33:44:55:66 fuga
$

これね。変数の最後に空白が入ってるの。。 こういうのどうにかならんのか・・・@@

https://ume.hatenadiary.com/entry/2023/04/12/160948

あああ、わかりました。この変数の中にメタ文字が含まれてるからですね・・

この場合だと

$ echo $MAC
e8:1b:69:6b:9c:93
$ echo $MAC | cat -v
e8:1b:69:6b:9c:93^M
$

こういうことかー。。。 意味が分かればこいつを消すように変数を変えてしまえばいいので
tech.kurojica.com
をまるっとパクって(ありがとうありがとう)

MAC=`echo $MAC | sed -e "s/[\r\n]\+//g"`

ってことにすればいいみたい。 元のファイルをnkfするほうが正解ですかね?
とりま今回はこれで逃げ。

t.co

これみててとりまシェルで全部書いてbcに渡せばいいんじゃね?ってことで

for NUM in `seq 1 200`; do GU=`echo "$NUM%2"|bc`; if [ $GU -eq 0 ] ;then echo -n "-$NUM"; else echo -n "+$NUM"; fi; done | sed 's/^+//g'

ってやると

ume@fifteen:~$ for NUM in `seq 1 200`; do GU=`echo "$NUM%2"|bc`; if [ $GU -eq 0 ] ;then echo -n "-$NUM"; else echo -n "+$NUM"; fi; done | sed 's/^+//g'
1-2+3-4+5-6+7-8+9-10+11-12+13-14+15-16+17-18+19-20+21-22+23-24+25-26+27-28+29-30+31-32+33-34+35-36+37-38+39-40+41-42+43-44+45-46+47-48+49-50+51-52+53-54+55-56+57-58+59-60+61-62+63-64+65-66+67-68+69-70+71-72+73-74+75-76+77-78+79-80+81-82+83-84+85-86+87-88+89-90+91-92+93-94+95-96+97-98+99-100+101-102+103-104+105-106+107-108+109-110+111-112+113-114+115-116+117-118+119-120+121-122+123-124+125-126+127-128+129-130+131-132+133-134+135-136+137-138+139-140+141-142+143-144+145-146+147-148+149-150+151-152+153-154+155-156+157-158+159-160+161-162+163-164+165-166+167-168+169-170+171-172+173-174+175-176+177-178+179-180+181-182+183-184+185-186+187-188+189-190+191-192+193-194+195-196+197-198+199-200ume@fifteen:~$

こうなるから そのままやるとbcがエラーを吐くんだよ

ume@fifteen:~$ for NUM in `seq 1 200`; do GU=`echo "$NUM%2"|bc`; if [ $GU -eq 0 ] ;then echo -n "-$NUM"; else echo -n "+$NUM"; fi; done | sed 's/^+//g' | bc
(standard_in) 1: syntax error
ume@fifteen:~$

しょうがないからechoをするとなぜかうまくいく

ume@fifteen:~$ echo $(for NUM in `seq 1 200`; do GU=`echo "$NUM%2"|bc`; if [ $GU -eq 0 ] ;then echo -n "-$NUM"; else echo -n "+$NUM"; fi; done | sed 's/^+//g') | bc
-100
ume@fifteen:~$

なんででしょうね・・ なんかフォーマットが適さないんかな? 多分最後のとこの改行がないことかな?
というわけで最後に無理やり改行入れてみる

ume@fifteen:~$ for NUM in `seq 1 200`; do GU=`echo "$NUM%2"|bc`; if [ $GU -eq 0 ] ;then echo -n "-$NUM"; else echo -n "+$NUM"; fi; done | sed 's/^+//g' | sed 's/$/\n/g' | bc
-100
ume@fifteen:~$

できた

ume@fifteen:~$ echo -n "1+2" | bc
(standard_in) 1: syntax error
ume@fifteen:~$

まぁ多分そういうことなんだろうと理解@@

iftop

Ubuntu 14.04.5 LTSのサーバがあってiftopしてるんだけど、これの公式パッケージだとiftopのバージョンがversion 1.0pre2になっていて-tとか-sとかのオプションが使えなくてすごい困るので、ソースを落としてきてmake && make installしたという話

 

Index of /pdw/iftop/download

 

ここにいっぱい置いてあるのでそれを使う。

 

wget http://www.ex-parrot.com/pdw/iftop/download/iftop-1.0pre4.tar.gz

tar zxvf iftop-1.0pre4.tar.gz

 

cd iftop-1.0pre4/

./configure

make

sudo make install

 

 

 

これで/usr/local/sbin 配下にiftopが置かれる

 

iftop -h 

...

iftop, version 1.0pre4
copyright (c) 2002 Paul Warren <pdw@ex-parrot.com> and contributors

 

 

 

https://paiza.jp/challenges/403/show

とりまbash

#!/bin/bash

read A

COUNT=`echo $A | wc -c`
COUNT=$(($COUNT+1))
for momo in `seq 1 $COUNT`
do
        echo -n "+"
done
echo ""
echo +"$A"+
for hoge in `seq 1 $COUNT`
do
        echo -n "+"
done
echo ""

exit 0

こんな感じかなぁ・・・力技でいいのです@@
最近何回ループさせるってやつでfor hoge in `seq 使うのお気に入り