1乡小、編寫腳本實(shí)現(xiàn)登陸遠(yuǎn)程主機(jī)卦绣。(使用expect和shell腳本兩種形式)第喳。
expect實(shí)現(xiàn):
預(yù)先yum安裝expect包
#!/usr/bin/expect
spawn ssh thomas@10.0.0.160
expect {
"yes/no" { send "yes\n"; exp_continue; }
"password" { send "mypasswd\n" }
}
interact
#expect eof
shell腳本:
需先yum安裝sshpass包
#read -p "Enter IP USER PASSWD: " r_ip r_user r_passwd
r_ip="10.0.0.160"
r_user=thomas
r_passwd=mypasswd
sshpass -p "$r_passwd" ssh $r_user@$r_ip -o StrictHostKeyChecking=no
2街望、生成10個(gè)隨機(jī)數(shù)保存于數(shù)組中校翔,并找出其最大值和最小值
max_min_a(){
i=1
declare -a num_arr
while (( i<= 10)); do
if [ $i -eq 1 ]; then
num_arr[i-1]=$RANDOM
min=${num_arr[i-1]}
max=${num_arr[i-1]}
else
num_arr[i-1]=$RANDOM
[ $max -lt ${num_arr[i-1]} ] && max=${num_arr[i-1]}
[ $min -gt ${num_arr[i-1]} ] && min=${num_arr[i-1]}
fi
let i++
done
#echo "Array is ${num_arr[*]}" 查看數(shù)組
echo "Max number: $max"
echo "Min number: $min"
}
max_min_a
3、輸入若干個(gè)數(shù)值存入數(shù)組中它匕,采用冒泡算法進(jìn)行升序或降序排序
升序或降序
declare -a num_arr
maopao_up(){
for (( i=0; i<10; i++ )); do
num_arr[i]=$RANDOM
done
echo "Original arr: ${num_arr[*]}"
counts=$[${#num_arr[*]}-1]
for (( i=$counts; i>=1; i-- )); do
for (( j=1; j<=i; j++ )); do
if [ ${num_arr[j-1]} -gt ${num_arr[j]} ]; then
tmp=${num_arr[j]}
num_arr[j]=${num_arr[j-1]}
num_arr[j-1]=$tmp
fi
done
done
echo "Sorted arr: ${num_arr[*]}"
}
maopao_down(){
for (( i=0; i<10; i++ )); do
num_arr[i]=$RANDOM
done
echo "Original arr: ${num_arr[*]}"
counts=$[${#num_arr[*]}-1]
for (( i=$counts; i>=1; i-- )); do
for (( j=1; j<=i; j++ )); do
if [ ${num_arr[j-1]} -lt ${num_arr[j]} ]; then
tmp=${num_arr[j]}
num_arr[j]=${num_arr[j-1]}
num_arr[j-1]=$tmp
fi
done
done
echo "Sorted arr: ${num_arr[*]}"
}
maopao_up
maopao_down
4展融、總結(jié)查看系統(tǒng)負(fù)載的幾種命令,總結(jié)top命令的指標(biāo)大概含義
uptime:主要查看系統(tǒng)平均負(fù)載(1豫柬,5告希,15分鐘平均負(fù)載)
free -h: 查看內(nèi)存使用情況
df -h: 查看磁盤【文件系統(tǒng)】利用率
iostat:監(jiān)控系統(tǒng)的IO負(fù)載,加參數(shù) -x 關(guān)注 %util(磁盤的的IO時(shí)間占比) 和 await(IO操作等待時(shí)間)
iotop:動(dòng)態(tài)查看磁盤讀寫
iotop:動(dòng)態(tài)查看IO負(fù)載占比
iftop:監(jiān)控網(wǎng)絡(luò)帶寬使用情況
nload:實(shí)時(shí)查看網(wǎng)卡流量吞吐情況
top命令說明:
top - 22:15:49 up 3:04, 2 users, load average: 0.01, 0.02, 0.05
#系統(tǒng)當(dāng)前時(shí)間 啟動(dòng)時(shí)間 在線用戶 平均負(fù)載 -- 等同于uptime
Tasks: 128 total, 1 running, 127 sleeping, 0 stopped, 0 zombie
#線程或任務(wù)數(shù)128個(gè)烧给, 1個(gè)運(yùn)轉(zhuǎn)中燕偶,127個(gè)睡眠中,0個(gè)停止础嫡,0個(gè)僵尸進(jìn)程
%Cpu(s): 0.0 us, 3.0 sy, 0.0 ni, 97.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
#us 未調(diào)整過nice優(yōu)先級(jí)的用戶空間的運(yùn)行時(shí)間
#sy 系統(tǒng)內(nèi)核進(jìn)程運(yùn)行時(shí)間
#ni 調(diào)整過nice優(yōu)先級(jí)的用戶的運(yùn)行時(shí)間
#id 系統(tǒng)空閑時(shí)間
#wa 系統(tǒng)等待I/O的時(shí)間
#hi 硬終端時(shí)間
#si 軟中斷時(shí)間
#st 虛擬機(jī)監(jiān)視器hypervisor從虛擬機(jī)偷走(占用)的時(shí)間
KiB Mem : 2027896 total, 1147956 free, 256888 used, 623052 buff/cache
#物理總內(nèi)存(KB)空閑內(nèi)存 已使用內(nèi)存 緩存
KiB Swap: 2097148 total, 2097148 free, 0 used. 1598568 avail Mem
#交換(虛擬)內(nèi)存 總大小指么、(KB)空閑大小、 已使用大小榴鼎、 可用物理內(nèi)存大小
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
#PID (進(jìn)程號(hào)) USER(進(jìn)程用戶) PR(系統(tǒng)優(yōu)先級(jí)伯诬,取值0-39,越小優(yōu)先級(jí)越高) NI(NICE優(yōu)先級(jí)巫财,取值-20-19盗似,越小優(yōu)先級(jí)越高)
#VIRT(虛擬內(nèi)存使用) RES( 使用的物理內(nèi)存大小) SHR( 共享內(nèi)存空間平项,可共享給其他進(jìn)程) S(進(jìn)程狀態(tài)) %CPU(CPU利用率)
#%MEM(物理內(nèi)存使用占比) TIME+(以百分之一秒為單位顯示占用CPU時(shí)間) COMMAND(進(jìn)程啟動(dòng)或關(guān)聯(lián)的程序名稱)
1 root 20 0 191312 4344 2648 S 0.0 0.2 0:01.46 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.08 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.03 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.63 rcu_sched
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
11 root rt 0 0 0 0 S 0.0 0.0 0:00.06 watchdog/0
5赫舒、編寫腳本,使用for和while分別實(shí)現(xiàn)192.168.0.0/24網(wǎng)段內(nèi)闽瓢,地址是否能夠ping通接癌,若ping通則輸出"success!",若ping不通則輸出"fail!"
for實(shí)現(xiàn)shell:
read -p "請(qǐng)輸入IP網(wǎng)絡(luò)地址段[example: 1.1.1.0]: " ip_net
[[ "$ip_net" =~ ^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]\.)$ ]] ||
{ echo $ip_net is invalid; exit; }
net_num1=`echo $ip_net | cut -d. -f1`
net_num2=`echo $ip_net | cut -d. -f2`
net_num3=`echo $ip_net | cut -d. -f3`
echo we are checking $net_num1.$net_num2.$net_num3.0/24...
for (( i=1; i<=254; i++ )); do
ip_addr=$net_num1.$net_num2.$net_num3.$i
ping -c1 $ip_addr &> /dev/null
if [ $? -eq 0 ]; then
echo $ip_addr successed!
else
echo $ip_addr faied!
fi
done
while實(shí)現(xiàn)shell:
read -p "請(qǐng)輸入IP網(wǎng)絡(luò)地址段[example: 1.1.1.0]: " ip_net
[[ "$ip_net" =~ ^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]\.)$ ]] ||
{ echo $ip_net is invalid; exit; }
net_num1=`echo $ip_net | cut -d. -f1`
net_num2=`echo $ip_net | cut -d. -f2`
net_num3=`echo $ip_net | cut -d. -f3`
echo we are checking $net_num1.$net_num2.$net_num3.0/24...
i=1
while (( i<=12 )); do
ip_addr=$net_num1.$net_num2.$net_num3.$i
ping -c1 $ip_addr &> /dev/null
if [ $? -eq 0 ]; then
echo $ip_addr successed!
else
echo $ip_addr faied!
fi
let i++
done
測(cè)試:
[root@centos7 shell_excercises]# bash ping_while.sh
請(qǐng)輸入IP網(wǎng)絡(luò)地址段[example: 1.1.1.0]: 192.168.0.0
we are checking 192.168.0.0/24...
192.168.0.1 successed!
192.168.0.2 faied!
192.168.0.3 faied!
192.168.0.4 faied!
192.168.0.5 faied!
192.168.0.6 faied!
192.168.0.7 faied!
192.168.0.8 faied!
192.168.0.9 faied!
6扣讼、每周的工作日1:30缺猛,將/etc備份至/backup目錄中,保存的文件名稱格式 為“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的時(shí)間
編輯定時(shí)任務(wù):crontab -e
30 1 * * 1-5 bash /data/shell_excercises/backup_etc.sh
自定義備份腳本backup_etc.sh內(nèi)容:
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[ -d /backup ] || mkdir /backup
dates=`date -d "-1 day" +"%F-%H"`
names="etcback-$dates.tar.xz"
tar -cPf "/backup/$names" "/etc"