Bash基礎

Bash の基本文法を使って基礎問題をやっていきましょう!

まずは List を見ながら問題を解いていき、ある程度覚えたら Flash Card にチャレンジしてください!

各問には制限時間があり、時間内に答えを出してください。エディタを用意して実際に書いてみると記憶に残りやすいのでおすすめです!

List Content

echo "Hello, World!" というコマンドを実行したときの出力は何ですか?

"Hello, World!"

for ループを使用して、1 から 10 までの数字を出力するスクリプトを書いてください。

for i in {1..10} ; do
    echo $i
done

ユーザーにパスワードを入力させ、そのパスワードが「password」と一致するかどうかを検証するスクリプトを書いてください。

read -s -p "Enter Password: " password
if [ $password = "password" ]
then
  echo "Access granted"
else
  echo "Access denied"
fi

引数として 2 つの数字を受け取り、それらを掛け合わせた結果を出力するスクリプトを書いてください。

product=$(($1 * $2))
echo "Product of $1 and $2 is $product"

引数としてディレクトリ名を受け取り、そのディレクトリ内のファイルの一覧を出力するスクリプトを書いてください。

dir=$1
for file in $dir/*
do
  echo $file
done

引数として文字列を受け取り、その文字列をすべて大文字に変換した結果を出力するスクリプトを書いてください。

string=$1
upper=$(echo $string | tr '[:lower:]' '[:upper:]')
echo $upper

ファイル file.txt に、1 から 10 までの数字を 1 行に 1 つずつ書いたものがあります。そのファイルから数字を読み取り、それらの合計を出力するスクリプトを書いてください。

sum=0
while read num
do
  sum=$((sum + num))
done < file.txt
echo "Sum is $sum"

引数としてファイル名を受け取り、そのファイルの行数を出力するスクリプトを書いてください。

file=$1
lines=$(wc -l < $file)
echo "Number of lines in $file is $lines"

引数としてファイル名を受け取り、そのファイル内で最も長い行の文字数を出力するスクリプトを書いてください。

file=$1
longest=$(wc -L < $file)
echo "Length of longest line in $file is $longest"

# L オプションがない場合
file="$1"
max_length=0

while IFS= read -r line; do
  length=${#line}
  if (( length > max_length )); then
    max_length=$length
  fi
done < "$file"

echo "最も長い行の文字数: $max_length"

引数としてファイル名を受け取り、そのファイル内で最も頻繁に出現する単語を出力するスクリプトを書いてください。ただし、スペースで区切られた単語のみをカウントし、単語の出現頻度が同じ場合は、最初に出現した単語を優先します。

file=$1
awk '{for(i=1;i<=NF;i++){print $i}}' $file | sort | uniq -c | sort -nr | awk '{print $2; exit}'