計画タスクat&crontab
10166 ワード
1、毎日の2時と12時ちょうど、/etcを/testdir/backupディレクトリにバックアップし、保存したファイル名の形式は「etcbak-yyyy-mm-dd-H.tar.xz」
2、毎週2、4、7バックアップ/var/log/messagesファイルを/logsディレクトリに、ファイル名は「messages-yyyyymmdd」
3、現在のシステム/proc/meminfoファイルからSまたはMで始まる情報を2時間ごとに/tmp/meminfoに追加する.txt
4、平日、10分ごとにディスク領域の検査を行い、パーティションの利用率が80%を超えることを発見したら、wall警報を実行する
5、スクリプトの作成/root/bin/createuser.shは、1つのユーザー名をパラメータとして使用し、指定したパラメータのユーザーが存在する場合は、その存在を表示し、そうでない場合は追加する機能を実現する.追加したユーザのid番号などの情報を表示する
6、スクリプトの作成/root/bin/yesorno.shは、yesまたはnoの入力をユーザに提示し、ユーザがyesまたはnoを入力したか、または他の情報を判断する
7、スクリプト/root/bin/filetypeを作成する.sh,ユーザがファイルパスを入力したと判断し,そのファイルタイプ(通常,ディレクトリ,リンク,その他のファイルタイプ)を表示する
8、スクリプトの作成/root/bin/checkint.shは、ユーザが入力したパラメータが正の整数であるか否かを判断する
9、判断/var/ディレクトリの下のすべてのファイルのタイプ
10、10人のユーザーuser 1-user 10を追加し、パスワードは8ビットのランダム文字である
11 、/etc/rc.d/rc3.dディレクトリの下には、Kで始まるファイルとSで始まるファイルがそれぞれ複数ある.各ファイルをそれぞれ読み出し、Kで始まるファイル出力をファイルプラスstop、Sで始まるファイル出力をファイル名プラスstart「K 34 filename stop」「S 66 filename start」とする
12、スクリプトを作成して、正の整数nの値を入力することを提示して、1+2+...+nの総和を計算します
13、スクリプトを作成し、192.168.0.0などのネットワークアドレスを入力して、入力したネットワークセグメントのホストのオンライン状態を判断してください.
14、/testdirディレクトリの下で10個のhtmlファイルを作成し、ファイル名は数字N(1から10)にランダムな8文字を加え、例えば1 AbCdeFgH.html
15、脚本を書いて、100以内のすべての正奇数の和を求める
16、スクリプトを作成し、192.168.0.0などのネットワークアドレスを入力し、入力したネットワークセグメントのホストのオンライン状態を判断し、オンラインホストとオフラインホストの各数を統計してください.
17、スクリプトを作成し、九九乗算表を印刷する
18、スクリプトを作成し、変数RANDOMを利用して10個のランダム数字を生成し、この10個の数字を出力し、その中の最大値と最小値を表示する
19、シナリオを作成し、チェス盤の印刷を実現する
20、後続の6つの文字列:1547773 ae 5 d、bc 3 f 3 efe 68、ada 7 aa 2054、4 ee 771 de 1 f、2 ebd 3 caa 45、3417171 ac 1はRANDOM乱数変数に対してコマンドを実行する:md 5 sum|cut–c 1-10の結果、これらの文字列に対応するRANDOM値を解読してください
mkdir -p /testdir/backup
vim /root/bin/etcbak.shrm
tar cvf /testdir/backup/etcbak-`date "+%F-%H"`.tar.xz /etc
chmod +x etcbak.sh
crontab -e
0 2,12 * * * /root/bin/etcbak.sh
2、毎週2、4、7バックアップ/var/log/messagesファイルを/logsディレクトリに、ファイル名は「messages-yyyyymmdd」
vim /root/bin/messages.sh
cp /var/log/messages /app/logs/messages-`date "+%Y%m%d"`
chmod +x messages.sh
crontab -e
0 0 * * 2,4,7 /root/bin/messages.sh
3、現在のシステム/proc/meminfoファイルからSまたはMで始まる情報を2時間ごとに/tmp/meminfoに追加する.txt
crontab -e
0 */2 * * * grep "^[S|M].*" /proc/meminfo >> /tmp/meminfo.txt
4、平日、10分ごとにディスク領域の検査を行い、パーティションの利用率が80%を超えることを発見したら、wall警報を実行する
crontab -e
vim disk.sh
[ `df -h |grep "^/dev/sd" |tr -s " " "%"|cut -d"%" -f5|sort -nr|head -1` -lt 80 ] || wall Disk will be full
*/10 * * * * /root/bin/disk.sh
shellスクリプト&条件判断練習
5、スクリプトの作成/root/bin/createuser.shは、1つのユーザー名をパラメータとして使用し、指定したパラメータのユーザーが存在する場合は、その存在を表示し、そうでない場合は追加する機能を実現する.追加したユーザのid番号などの情報を表示する
read -p "give an username:" name
if id $name &> /dev/null;then
echo "the user is exist"
else
useradd $name
echo "user id is `id -u $name`"
fi
6、スクリプトの作成/root/bin/yesorno.shは、yesまたはnoの入力をユーザに提示し、ユーザがyesまたはnoを入力したか、または他の情報を判断する
read -p "go with me play football,yes or no :" answer
answer=`echo $answer | tr 'A-Z' 'a-z'`
if [ $answer == yes -o $answer == y ] ; then
echo "you are a playboy"
elif [ $answer == no -o $answer == n ] ; then
echo "you are not a playboy"
else
echo "you answer is false"
fi
7、スクリプト/root/bin/filetypeを作成する.sh,ユーザがファイルパスを入力したと判断し,そのファイルタイプ(通常,ディレクトリ,リンク,その他のファイルタイプ)を表示する
read -p "you must give filename:" filename
if [ -L $filename ];then
echo "the file is link file"
elif [ -f $filename ];then
echo "the file is flat file"
elif [ -d $filename ];then
echo "the file is dir file"
elif [ -b $filename ];then
echo "the file is block device file"
elif [ -c $filename ];then
echo "the file is char device file"
elif [ -p $filename ];then
echo "the file is pipe file"
elif [ -S $filename ];then
echo "the file is socket file"
else
echo "You input the wrong filename"
fi
8、スクリプトの作成/root/bin/checkint.shは、ユーザが入力したパラメータが正の整数であるか否かを判断する
read -p "plase input number:" num
if [[ "$num" =~ ^[0-9]+$ ]];then
echo "the number is positive whole number"
else
echo "input error"
fi
shellスクリプト&forループ練習
9、判断/var/ディレクトリの下のすべてのファイルのタイプ
for i in $@ ; do
if [ -L $i ];then
echo "the $i is link file"
elif [ -f $i ];then
echo "the $i is flat file"
elif [ -d $i ];then
echo "the $i is dir file"
elif [ -b $i ];then
echo "the $i is block device file"
elif [ -c $i ];then
echo "the $i is char device file"
elif [ -p $i ];then
echo "the $i is pipe file"
elif [ -S $i ];then
echo "the $i is socket file"
else
echo "You input the weong filename"
fi
done
10、10人のユーザーuser 1-user 10を追加し、パスワードは8ビットのランダム文字である
for i in {1..10};do
if id user$i &> /dev/null ; then
echo "the user$i is exsit"
passwd `tr -dc 'a-zA-Z0-9'< /dev/urandom |head -c8` &> /dev/null | passwd --stdin user$i &> /dev/null echo "user$i passwd is finished"
else
useradd user$i
passwd `tr -dc 'a-zA-Z0-9'< /dev/urandom |head -c8` &> /dev/null | passwd --stdin user$i &> /dev/null echo "add user$i and passwd is finished"
fi
done
11 、/etc/rc.d/rc3.dディレクトリの下には、Kで始まるファイルとSで始まるファイルがそれぞれ複数ある.各ファイルをそれぞれ読み出し、Kで始まるファイル出力をファイルプラスstop、Sで始まるファイル出力をファイル名プラスstart「K 34 filename stop」「S 66 filename start」とする
:
ls /etc/rc.d/rc3.d/ | sed -n -e 's#^K.*#& stop#p' -e 's#^S.*#& start#p'
:
for i in `ls /etc/rc.d/rc3.d` ;do
echo $i | sed -n -e 's#^K.*#& stop#p' -e 's#^S.*#& start#p'
done
12、スクリプトを作成して、正の整数nの値を入力することを提示して、1+2+...+nの総和を計算します
read -p "you must give a positive number: " num
sum=0
for i in `seq 1 $num` ;do
let sum=sum+i
done
echo "The sum is $sum"
13、スクリプトを作成し、192.168.0.0などのネットワークアドレスを入力して、入力したネットワークセグメントのホストのオンライン状態を判断してください.
read -p "please input an ip : " IP
for i in $IP ; do
nmap -v -sn $IP/24 | grep -B 1 "Host is up"
done
14、/testdirディレクトリの下で10個のhtmlファイルを作成し、ファイル名は数字N(1から10)にランダムな8文字を加え、例えば1 AbCdeFgH.html
for i in {1..10} ;do
for j in `tr -dc 'a-zA-Z'< /dev/urandom |head -c8` ; do
touch /testdir/$i$j.html
done
done
shellスクリプト&whileループ練習
15、脚本を書いて、100以内のすべての正奇数の和を求める
i=0
sumji1=0
sumou1=0
while [ $i -le 100 ] ; do
if [ $(($i%2)) == 0 ] ;then
let sumou1=sumou1+i
else
let sumji1=sumji1+i
fi
let i++
done
echo "The sumji is $sumji1"
echo "The sumou is $sumou1"
:
for i in {1..100};do
if [ $(($i%2)) == 0 ] ;then
let sumou=sumou+i
else
let sumji=sumji+i
fi
done
echo "The sumji is $sumji"
echo "The sumou is $sumou"
16、スクリプトを作成し、192.168.0.0などのネットワークアドレスを入力し、入力したネットワークセグメントのホストのオンライン状態を判断し、オンラインホストとオフラインホストの各数を統計してください.
read -p "please input an ip : " IP
ip=$IP
i=0
ipup=0
ipdown=0
while [ $i -le 2 ] ; do
j=0
while [ $j -le 2 ] ; do
if [ $i == 0 -a $j == 0 ] || [ $i==255 -a $j == 255 ] ;then
ping -b -c 1 -W 1 $ip.$i.$j &> /dev/null
if [ $? == 0 ] ; then
echo "The $ip.$i.$j is up"
let ipup++
else
echo "The $ip.$i.$j is down" &> /dev/null
let ipdown++
fi
else
ping -c 1 -W 1 $ip.$i.$j &> /dev/null
if [ $? == 0 ] ; then
echo "The $ip.$i.$j is up"
let ipup++
else
echo "The $ip.$i.$j is down" &> /dev/null
let ipdown++
fi
fi
let j++
done
let i++
done
echo "host up is $ipup"
echo "host down is $ipdown"
let j++
done
k=1
while [ $k -le $((2*$i-1)) ] ; do
echo -e "^\c"
let k++
done
let i++
echo
done
17、スクリプトを作成し、九九乗算表を印刷する
i=1
while [ $i -le 9 ] ; do
j=1
while [ $j -le $i ] ; do
echo -e "$i*$j=$(($i*$j))\t\c"
let j++
done
echo
let i++
done
18、スクリプトを作成し、変数RANDOMを利用して10個のランダム数字を生成し、この10個の数字を出力し、その中の最大値と最小値を表示する
:
for i in {1..10} ; do
k=`echo $RANDOM`
l="$l $k"
if [ $i -eq 1 ] ; then
let max=$k
let min=$k
fi
if [ $k -ge $max ]; then
let max=$k
elif [ $k -le $min ] ; then
let min=$k
fi
done
echo $l
echo max $max
echo min $min
:
i=1
while [ $i -lt 10 ] ; do
k=`echo $RANDOM`
l="$l $k"
if [ $i -eq 1 ] ; then
let max=$k
let min=$k
fi
if [ $k -ge $max ]; then
let max=$k
elif [ $k -le $min ] ; then
let min=$k
fi
let i++
done
echo $l
echo max $max
echo min $min
:
i=1
while [ $i -le 10 ] ; do
let random=`echo $RANDOM`
z="$z $random"
while [ $i -eq 1 ] ; do
let max=$random
let min=$random
let i++
done
j=1
while [[ $j -le 1 ]] ;do
[[ $random -gt $max ]] && max=$random
let j++
done
j=1
while [[ $j -le 1 ]] ;do
[[ $random -lt $min ]] && min=$random
let j++
done
let i++
done
echo the $z
echo the max is $max
echo the min is $min
19、シナリオを作成し、チェス盤の印刷を実現する
:
i=1
while [ $i -le 8 ] ; do
if [ $(($i%2)) == 1 ]; then
j=1
while [ $j -le 4 ] ; do
echo -e "\033[41m \033[0m\c"
echo -e "\033[43m \033[0m\c"
let j++
done
else
k=1
while [ $k -le 4 ] ; do
echo -e "\033[43m \033[0m\c"
echo -e "\033[41m \033[0m\c"
let k++
done
fi
echo
let i++
done
:
for i in {1..8} ; do
if [ $(($i%2)) == 1 ]; then
for j in {1..4} ; do
echo -e "\033[41m \033[0m\c"
echo -e "\033[43m \033[0m\c"
done
else
for k in {1..4} ; do
echo -e "\033[43m \033[0m\c"
echo -e "\033[41m \033[0m\c"
done
fi
echo
done
:
until [ $I -gt 8 ] ; do
if [ $(($I%2)) == 1 ]; then
J=1
until [ $J -gt 4 ] ; do
echo -e "\033[41m \033[0m\c"
echo -e "\033[43m \033[0m\c"
let J++
done
else
K=1
until [ $K -gt 4 ] ; do
echo -e "\033[43m \033[0m\c"
echo -e "\033[41m \033[0m\c"
let K++
done
fi
echo
let I++
done
20、後続の6つの文字列:1547773 ae 5 d、bc 3 f 3 efe 68、ada 7 aa 2054、4 ee 771 de 1 f、2 ebd 3 caa 45、3417171 ac 1はRANDOM乱数変数に対してコマンドを実行する:md 5 sum|cut–c 1-10の結果、これらの文字列に対応するRANDOM値を解読してください
for k in {1..32767} ; do
i=`echo $k |md5sum|cut -c1-10`
if [ $i == efbaf275cd ] ; then
echo "the efbaf275cd is m5m $k create"
elif [ $i == 4be9c40b8b ] ; then
echo "the 4be9c40b8b is m5m $k create"
elif [ $i == 44b2395c46 ] ; then
echo "the 44b2395c46 is m5m $k create"
elif [ $i == f8c8873ce0 ] ; then
echo "the f8c8873ce0 is m5m $k create"
elif [ $i == b902c16c8b ] ; then
echo "the b902c16c8b is m5m $k create"
elif [[ $i == ad865d2f6* ]] ; then
echo "the ad865d2f6 is m5m $k create"
fi
done