基本コマンド
ファイル操作
ls
ls -la
ls -lh
cd /path/to/dir
cd ~
cd -
cd ..
cp file1 file2
cp -r dir1 dir2
mv file1 file2
rm file
rm -rf dir
mkdir dir
mkdir -p a/b/c
cat file
head -n 10 file
tail -n 10 file
tail -f file
less file
テキスト処理
grep "pattern" file
grep -r "pattern" dir
grep -i "pattern" file
grep -n "pattern" file
grep -v "pattern" file
sed 's/old/new/' file
sed 's/old/new/g' file
sed -i 's/old/new/g' file
awk '{print $1}' file
awk -F: '{print $1}' file
cut -d: -f1 file
sort file
sort -n file
sort -r file
sort -u file
uniq file
sort file | uniq
uniq -c file
wc -l file
wc -w file
wc -c file
ファイル検索
find . -name "*.txt"
find . -type f -name "*.log"
find . -type d -name "src"
find . -mtime -7
find . -size +100M
find . -name "*.tmp" -delete
locate filename
変数
name="Alice"
echo $name
echo ${name}
export PATH="$PATH:/new/path"
export NODE_ENV=production
$0
$1
$@
$*
$#
$?
$$
$!
${var:-default}
${var:=default}
${#var}
${var#pattern}
${var##pattern}
${var%pattern}
${var%%pattern}
${var/old/new}
${var//old/new}
制御構文
条件分岐
if [ "$name" = "Alice" ]; then
echo "Hello Alice"
elif [ "$name" = "Bob" ]; then
echo "Hello Bob"
else
echo "Hello stranger"
fi
[ "$a" = "$b" ]
[ "$a" != "$b" ]
[ -z "$a" ]
[ -n "$a" ]
[ $a -eq $b ]
[ $a -ne $b ]
[ $a -lt $b ]
[ $a -le $b ]
[ $a -gt $b ]
[ $a -ge $b ]
[ -e file ]
[ -f file ]
[ -d dir ]
[ -r file ]
[ -w file ]
[ -x file ]
[ cond1 ] && [ cond2 ]
[ cond1 ] || [ cond2 ]
! [ cond ]
[[ $name == A* ]]
[[ $name =~ ^A.*$ ]]
ループ
for i in 1 2 3 4 5; do
echo $i
done
for i in {1..10}; do
echo $i
done
for file in *.txt; do
echo $file
done
for ((i=0; i<10; i++)); do
echo $i
done
while [ $count -lt 10 ]; do
echo $count
((count++))
done
while read line; do
echo $line
done < file.txt
case
case $option in
start)
echo "Starting..."
;;
stop)
echo "Stopping..."
;;
restart)
echo "Restarting..."
;;
*)
echo "Unknown option"
;;
esac
関数
greet() {
local name=$1
echo "Hello, $name!"
return 0
}
greet "Alice"
result=$(greet "Alice")
status=$?
リダイレクト・パイプ
command > file
command >> file
command 2> file
command &> file
command < file
command1 | command2
ls | grep "txt" | wc -l
cat << EOF
複数行の
テキスト
EOF
diff <(command1) <(command2)
便利なテクニック
date=$(date +%Y%m%d)
files=$(ls *.txt)
((result = 5 + 3))
result=$((5 + 3))
command &
nohup command &
command1 && command2
command1 || command2
command1 ; command2
find . -name "*.txt" | xargs grep "pattern"
find . -name "*.tmp" | xargs rm
command | tee file
シェルスクリプト例
#!/bin/bash
set -e
set -u
if [ $# -lt 1 ]; then
echo "Usage: $0 <filename>"
exit 1
fi
if [ ! -f "$1" ]; then
echo "File not found: $1"
exit 1
fi
echo "Processing $1..."
関連記事
← 一覧に戻る