このページの目的
たまに参加するシェル芸勉強会のレベルが高すぎて、素人は結構厳しい物があるなぁと思ったので、ちょっと調べればギリギリ答えれられるかなぐらいの問題を自作してみました。
一応回答例を最後に載せていますが、もっとよい回答作れた!!等あればバシバシください。
解説は気が向いたら追記します
対象者
・shellの勉強をしたいけど何から勉強したら良いかわからない
・シェル芸勉強回に参加したい
問題
shell(ターミナル)上で下記の問題を解いてください。
回答は白色で書いてありますので、全選択等でみてください。
また、回答のダブルクオート/シングルクオート/バッククオートが”等になってしまっているので、実行する際には置換してください。
– 例題 –
問題
1を出力してください
回答例
echo 1
連続した数字を出力
問題
1 ~ 100までの数字を横一列に出力してください
出力例)
1 2 3 4 …. 100
回答例
echo {1..100}
seq -s ” ” 100
縦一列に連続した数字を出力
問題
1~100までの数字を縦一列に出力してください
出力例)
1
2
3
…
100
回答例
echo {1..100} | xargs -n1
seq 100
減っていく連続した数字を出力
問題
1~100を逆順に出力してください
出力例)
100
99
…
1
回答例
echo {100..1} | xargs -n1
echo {1..100} | xargs -n1 | tac
seq 100 -1 1
数列を改行する
問題
1~100までの数字を10ずつ改行してください
出力例)
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
回答例
echo {1..100} | sort -R | xargs -n10
for n in `seq 100`; do [ $(( n % 10 )) == 0 ] && echo $n || echo $n | tr “\n” ” “; done
数列をシャッフル
問題
重複なしのランダムな10*10の数列を出力してください
出力例)
83 45 91 49 17 11 27 96 18 98
32 64 10 77 19 44 57 42 30 62
24 22 35 58 28 66 92 7 15 68
16 33 75 34 74 79 85 36 12 65
2 23 14 87 43 73 80 41 70 90
88 84 8 52 71 13 46 86 60 99
93 3 20 100 51 9 53 29 67 37
31 6 69 21 78 26 40 56 97 1
47 89 55 59 39 72 61 94 5 63
25 48 50 76 38 82 4 54 95 81
回答例
seq 100 | shuf | xargs -n10
echo {1..100} | xargs -n1 | sort -R | xargs -n10
echo {1..100} | xargs -n1 | shuf | xargs -n10
arr=(shuf -i 1-100
); for ((i=1; i<${#arr[@]}; i++)); do [ $(( i % 10 )) == 0 ] && echo ${arr[i]} || echo ${arr[i]} | tr “\n” ” “; done; echo “”
上下の反転
問題
問題4を数字はそのままで上下を反転してください
出力例)
91 92 93 94 95 96 97 98 99 100
81 82 83 84 85 86 87 88 89 90
71 72 73 74 75 76 77 78 79 80
61 62 63 64 65 66 67 68 69 70
51 52 53 54 55 56 57 58 59 60
41 42 43 44 45 46 47 48 49 50
31 32 33 34 35 36 37 38 39 40
21 22 23 24 25 26 27 28 29 30
11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6 7 8 9 10
回答例
echo {1..100} | xargs -n10 | tac
左右の反転
問題
問題4の出力を数字はそのままで左右を反転
出力例)
10 9 8 7 6 5 4 3 2 1
20 19 18 17 16 15 14 13 12 11
30 29 28 27 26 25 24 23 22 21
40 39 38 37 36 35 34 33 32 31
50 49 48 47 46 45 44 43 42 41
60 59 58 57 56 55 54 53 52 51
70 69 68 67 66 65 64 63 62 61
80 79 78 77 76 75 74 73 72 71
90 89 88 87 86 85 84 83 82 81
100 99 98 97 96 95 94 93 92 91
回答例
echo {1..100} | xargs -n10 | rev | xargs -n1 | rev | xargs -n10
右に90度回す
問題
問題4を数字はそのままで90度回転
出力例)
91 81 71 61 51 41 31 21 11 1
92 82 72 62 52 42 32 22 12 2
93 83 73 63 53 43 33 23 13 3
94 84 74 64 54 44 34 24 14 4
95 85 75 65 55 45 35 25 15 5
96 86 76 66 56 46 36 26 16 6
97 87 77 67 57 47 37 27 17 7
98 88 78 68 58 48 38 28 18 8
99 89 79 69 59 49 39 29 19 9
100 90 80 70 60 50 40 30 20 10
回答例
echo {1..100} | xargs -n10 | awk ‘START{a} {for(i=1;i<=10;i++){a[NF-i]=$(i)” “a[NF-i]}} END {for(j=10;j>=0;j–){print(a[j])}}’
コメント