shell

#!/bin/bash
n=0
for i in $(seq 1000)
do
	n=$(echo $n + $i | bc)
done
echo $n

vagrant@trusty:~/other$ sh main.sh
500500

#!/bin/bash
n=0
for i in $(seq 5)
do
	echo "${i}回目の実行です"
done

vagrant@trusty:~/other$ sh main.sh
1回目の実行です
2回目の実行です
3回目の実行です
4回目の実行です
5回目の実行です

#!/bin/bash
n=0
for i in $(seq 5)
do
	echo "$i * 3" | bc
done
#!/bin/bash
for i in $(seq 5)
do
	printf "$i + "
	[ $i -eq 5 ] && printf "0\n"
done | bc

echoは改行を付与するがprintfは改行を入れない
-eq はイコール


#!/bin/bash
cnt=0
if [ -z “$1”]; then
cat <&0 else cat "$1" fi | while read line do echo "Installing $line" go get -u "$line" & (( (cnt += 1) % 16 == 0 )) && wait done wait [/code] -z "$1" : $1が指定していないときはTrueを返す &0: 標準入力(ファイルディスクリプタ 0) >> 追記する

am拡張子はautomake template


#!/bin/bash
cat >>Makefile.am < [/code]

shellでメール送信

シェルでメールを送信したい
mail1.txt

From: narishige7@gmail.com
To: narishige7@gmail.com
Subject: Hello, e-mail!

Hi, can you see?

[vagrant@localhost python]$ cat mail1.txt |
> sendmail -i -t

i:入力されるメッセージ中の `.’ だけを含む行を無視
t:受け手をメッセージから読み取り

その2


#!/bin/bash

export PATH=$PATH:/usr/sbin

MAIL_TO=”ore@gmail.com”
MAIL_FROM=”noreply@hogehoge.com”
SUBJECT=”テストメール”
DATA=”データ”

mail_send () {

CAT << EOD | nkf -j -m0 | sendmail -t FROM: ${MAIL_FROM} To: ${MAIL_TO} MIME-Version: 1.0 Content-Type: text/plain; charset="ISO-2022-JP" Content-Transfer-Encoding: 7bit メールが送信されます。 ここに${DATA}が入る EOD } mail_send exit 0 [/code]

.bashrc, .bash_profile

When using bash, you can customize the usage environment to your linking.

bash_profile
It is executed once at login. For example, it will be loaded when you start the terminal app. You should set an environment variable(a variable declared by export) to what should be specifically set in this file.

.bashrc
It is executed once at shell startup. If you hit bash on the command line, .bashrc will be read again.(.bash_profile is not read). If you want to set it each time you start the shell, put the settings in this file.

You may want to set aliases, shell functions, and command line completion for what to set specifically in this file.

~/.bash_profile
~/.bashrc

shell, perlとphpの比較演算子

Perl
———————————
数値比較
> : より大きい
>= : より大きいか等しい
< : より小さい <= : より小さいか等しい == : 等しい != : 等しくない <=> : 比較

文字列比較
gt: より大きい
ge: より大きいか等しい
lt: より小さい
le: より小さいか等しい
eq: 等しい
ne: 等しくない
cmp: 比較

PHP
———————————
== : 等しい
=== : 同じ
!= : 等しくない
!=== : 同じでない
> : より大きい
< : より小さい >= : 以上
<= : 以下 <=> : より小さい等しいより多き

ん?なんだこの<=>って??あんまり見ないけど。

Shell
———————————
eq : equal to
ge : greater than or equal to
gt : greater than
le : less than or equal to
lt : less than
ne : not equal to

シェルは文字列か。なんか注意が必要ですな

シェルの実行権限

./test.sh

#!/bin/sh
echo "Hello, World!"

[vagrant@localhost test]$ sed ‘s/\r//’ test.sh
#!/bin/sh
echo “Hello, World!”[vagrant@localhost test]$ ./test.sh
-bash: ./test.sh: 許可がありません
[vagrant@localhost test]$ ls -l
合計 8
-rw-rw-r– 1 vagrant vagrant 219 3月 31 16:33 2019 index.php
-rw-rw-r– 1 vagrant vagrant 31 4月 1 20:34 2019 test.sh

パーミッションは664。644に変えてみる。

[vagrant@localhost test]$ chmod 644 test.sh
[vagrant@localhost test]$ ./test.sh
-bash: ./test.sh: 許可がありません

やっぱり755でないと駄目なのか。。
モード(数字)|モード(アルファベット)|権限
4|r|読み取り
2|w|書き込み
1|x|実行

chmod +x というのは、実行権限を与える、ということね。

[vagrant@localhost test]$ chmod u+x test.sh
[vagrant@localhost test]$ ./test.sh
Hello, World!
[vagrant@localhost test]$ chmod u-x test.sh
[vagrant@localhost test]$ ./test.sh
-bash: ./test.sh: 許可がありません

なるほど、実行権限か~

shell 文字列長のオプション -n

-n:文字列長が 0 より大なら真

#!/bin/sh

index="hoge"
if [ -n $index ]; then
	echo "文字列長が0より大です"
fi

[vagrant@localhost tests]$ sed -i ‘s/\r//’ test.sh
[vagrant@localhost tests]$ ./test.sh
文字列長が0より大です

#!/bin/sh

index=""
if [ -n $index ]; then
	echo "文字列長が0より大です"
fi

[vagrant@localhost tests]$ sed -i ‘s/\r//’ test.sh
[vagrant@localhost tests]$ ./test.sh
文字列長が0より大です

あれええええええええええええええええええ??

shell loop(for), function, +α

#!/bin/sh

for var in 0 1 2 3 4
do
	echo $var
done

[vagrant@localhost tests]$ sed -i ‘s/\r//’ test.sh
[vagrant@localhost tests]$ ./test.sh
0
1
2
3
4

{0..5}とも書ける。」

#!/bin/sh

for var in {0..5}
do
	echo $var
done

function

#!/bin/sh

MyFunction(){
	echo "display function"
}
MyParamFunc(){
	echo "parm1:$1 param2:$2"
}

MyFunction
MyParamFunc 5 4

[vagrant@localhost tests]$ sed -i ‘s/\r//’ test.sh
[vagrant@localhost tests]$ ./test.sh
display function
parm1:5 param2:4

with linux command

#!/bin/sh

index=1
for file in *.txt
do
	mv "$file" "mytxt${index}.txt"
	index=`expr $index + 1`
done

[vagrant@localhost tests]$ sed -i ‘s/\r//’ test.sh
[vagrant@localhost tests]$ ./test.sh

すげええええええええええええええええええええええええ

shell while

#!/bin/sh

a=0
while [ $a -lt 5 ]
do
	echo $a
	a=`expr $a + 1`
done

[vagrant@localhost tests]$ sed -i ‘s/\r//’ test.sh
[vagrant@localhost tests]$ ./test.sh
0
1
2
3
4

‘と`の違いで手古摺った.

#!/bin/sh

a=0
until [ ! $a -lt 5 ]
do
	echo $a
	a=`expr $a + 1`
done

shell case

#!/bin/sh

DRINK="beer"
case "$DRINK" in
	"beer") echo "this is beer"
	;;
	"juice") echo "that is juice"
	;;
	"coak") echo "Do not drink it"
	;;
esac

[vagrant@localhost tests]$ sed -i ‘s/\r//’ test.sh
[vagrant@localhost tests]$ ./test.sh
this is beer

esacとか、使い慣れてないなー

shell if

#!/bin/sh

if [ "$1" -gt "$2" ]
then
	echo "1番目の引数が2番目の引数より大きい"
elif [ "$1" -eq "$2" ]
then
	echo "1番目の引数と2番目の引数は同じです"
else
	echo "1番目の引数が2番目の引数より小さい"
fi

[vagrant@localhost tests]$ sed -i ‘s/\r//’ test.sh
[vagrant@localhost tests]$ ./test.sh 5 4
1番目の引数が2番目の引数より大きい