bashでcsvファイルを連番ファイル名でコピーする

たくさんのCSVファイルを用意したかったので、bashでやりました

まずは1つcsvファイルを用意

$ ls
sample.csv

for文を使ってコピーします

$ for i in {1..20}: do cp sample.csv $i.csv; done;

これで 1.csv 2.csv 3.csv … と20個のcsvファイルができました

普通のシェルスクリプトをセミコロンで区切ってワンライナーにしてるだけでした

gitコマンドが長いのでUbuntu上で短くしてみる

作業効率化のためgitコマンドが長いので、Ubuntu上で.bashrcにショートカットを登録してみました

参考: Gitコマンドラインショートカット | プログラミング | POSTD

git aliasでも短くできますが、gitが長いので、ubuntuでやります

追記
$ vim ~/.bashrc

# Git alias
alias ga='git add .'
alias gc='git commit -m'
alias gb='git branch -a'
alias gs='git status'
alias gl='git log --graph --oneline --decorate --all'

こんな感じにしてみました
認識させるため

$ source ~/.bashrc
(もしくは再起動)

これで少しは効率化

curlコマンドに変数を渡す

curlコマンドでslackに通知する
でcurlを使ってslackに通知した際、メッセージをシェルスクリプトで用意して送ってみました

シェルスクリプトはこんな感じ

error="何かしらのエラー"
curl_content='payload={"channel": "#channel", "username": "webhooker", "text": "'
curl_content="${curl_content}${error}"
curl_content="${curl_content}\"}"
curl="curl -X POST --data-urlencode `echo -e "'${curl_content}'"` https://hooks.slack.com/services/XXXXXXX/XXXXXXX/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
eval $curl

error変数にメッセージをセット、
jsonを組み立てて、
curlコマンドごと変数にセット、
evalで実行
な感じです

シェルスクリプトレベルが低すぎてこんなんになった
もっとうまくかけるはず..

bashのヒアドキュメントでコマンドを実行する

bashのヒアドキュメントでコマンドを実行させるのに手間取ったのでメモ

‘EOT’のようにシングルクオート(やダブルクオート)をつけると変数が展開されません

/home/user/shell
で実行しました

こう書けばできました

#!/bin/bash

x=`pwd`

cat <<EOT
${x}
$(dirname $x)
EOT
# /home/user/shell
# /home/user/

cat <<'EOT'
${x}
$(dirname $x)
EOT
# ${x}
# $(dirname $x)

cat <<"EOT"
${x}
$(dirname $x)
EOT
# ${x}
# $(dirname $x)

コマンドの下にコメントアウトで結果を表示してます