記事にするほどではないけど便利な自作ShellScriptまとめ

よく使う便利なコマンドはまとめて全部しまっちゃおうねぇ。ホームディレクトリにscriptフォルダを作り、そこからsourceコマンドでまとめてあるscriptを呼び出してつかっています。暇な時に簡単な解説つけて更新します。

↓↓↓ここからが内容↓↓↓

## ローカルレポジトリと同じ構成の今いるディレクトリを反映し、ファイルを更新できるShellScript

`pwd` と`<<` をつかって今いるパスを抜き出し、`sed` によってパスの前半部分を消去し、gitのパスを引くことで今いるディレクトリのファイルを見つけ`cp` を使って上書きします。`END` が崩れているのは仕様です。バックアップをとりつつ更新もらくらくです。

### update.sh

```shell
main(){
  func(){
    echo "copy $i ? y/n"
    read w
    if [ "$w" == "y" ]; then
      y=$(pwd)
      z=$(sed 's/\/home\/aki\/program//g' <<END
$y
END
)
      cp $i ~/github/portfolio$z/
      echo "$i copy"
    elif [ "$w" == "n" ]; then
      echo "$i didn't"
    else
      echo "error"
      func
    fi
  }
  x=$(ls)
  for i in $x
  do
    func
  done
}

echo "script start"
main
echo "script end"
```

##ディレクトリ内のファイルを消去するかしないか選択し、連続的に消去できるShellScript

`ls` で取得したディレクトリ内の値をIO処理させずそのまま変数に代入する方法を見つけたので作ってみました。簡単なスクリプトですがGUIでのあの煩わしさがなくて幸せになれます。

プログラムはgitのレポジトリに置いてあります。
rmCycle.sh
https://github.com/mamepon2580/portfolio/tree/master/ShellScript/rmCycle

### rmCycle.sh

```shell
main(){
  x=$(ls)
  for i in $x
  do
    echo "remove file $i ? y/n"
    read y
    if [ "$y" == "y" ];then
      rm -r $i
      echo "$i remove"
    elif [ "$y" == "n" ]; then
      echo "$i didn't"
    else
      echo "error"
    fi
  done
  ls
}

echo "start script"
main
echo "end script"
```

## 今いる位置を確認しながらディレクトリ内を、縦横無尽に駆け巡るShellScript

ディレクトリ名を覚えられない頭の弱い子で、`ls` `cd` をいつも交互に繰り返しているので、いっそのと一つにまとめちゃいました。ついでに番号で移動できるようにしたのと、再帰を使って連続的に処理できるようにしています。

プログラムはgitのレポジトリに置いてあります。
lscd.sh
https://github.com/mamepon2580/portfolio/tree/master/ShellScript/lscd

### lscd.sh

```shell
##lscd.sh
main() {
  x=$(ls)
  y=$(sed 's/ /\n/g' <<EOF
$x
EOF
)
  cat -n <<EOF
$y
EOF
  y=($y)
  echo "please diectry name or .. or q or number"
  read z
  if [ "$z" == "q" ] ; then
    echo "quit"
  elif [ "$z" == ".." ] ; then
    cd ..
    echo "change directry"
    echo "${PWD##*/}"
    main
  else
    w=$(expr $z - 1)
    cd ${y[$w]}
    echo "change directry"
    echo "${PWD##*/}"
    main
  fi
}

echo "start lscd script"
main
echo "end lscd script"
```

## gitのリポジトリにpull、pushするだけの簡単なShellScript

サルでも覚えられると巷でウワサされるgitコマンドを忘れ、Qiitaの記事を開いてそのまま入力することに疲れてたんだ…。簡単なpull、pushのコマンドをまとめたshellscriptです。

プログラムはgitのレポジトリに置いてあります。
pull.sh
https://github.com/mamepon2580/portfolio/tree/master/shellscript/pull
push.sh
https://github.com/mamepon2580/portfolio/tree/master/shellscript/push

### pull.sh

- **`pull.sh`** はそのまま一緒にリモートリポジトリ送りにされるのが嫌なので、ローカルリポジトリのすぐ上のディレクトリに保存しておきます。`pullScript` 中身はコマンドを固めただけです。

```shell
pullScript(){
 cd portfolio
 git pull origin master
 cd ..
}

echo "start pull script"
pullScript
echo "end pull script"
```

### push.sh

- **`push.sh`** も `pull.sh`と同様に、ローカルリポジトリのすぐ上のディレクトリに保存しておきます。`read` で変数 x を入力として受け付け`git commit -m` 引数としてコミットコメントを渡します。また変数 y を定義しその値によって分岐させます。※注意if文の条件は[スペース 条件式 スペース]にしないとうまくいきません←ここで二時間位悩んだ。

```shell
pushScript(){
 cd portfolio
 git add .
 echo "all file in staging"
 echo "please comment"
 read x y
 git commit -m $x -m $y
 echo "all file in local repository"
 echo "please :m is master , :b is brunch"
 read z
 if [ "$z" = ":m" ] ; then
  git push origin master
 elif [ "$z" = ":b" ] ; then
  echo "please brunch name"
  read w
  git push origin $w:$w
 else
  echo "error"
fi
 cd ..
}

echo "start push script"
pushScript
echo "end push script"
```