日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

shell训练营Day31

發布時間:2025/3/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell训练营Day31 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

練習96
需求背景:

領導要求小明備份數據庫服務器里面的100個庫(數據量在幾十到幾百G),需要以最快的時間完成(5小時內),并且不能影響服務器性能。

#!/bin/bash
##假設100個庫的庫名、host、port以及配置文件路徑存到了一個文件里,文件名字為/tmp/databases.list
##格式:db1 10.10.10.2 3308 /data/mysql/db1/my.cnf
##備份數據庫使用xtrabackup(由于涉及到myisam,命令為inoobackupex)

exec &> /tmp/mysql_bak.log

if ! which innobackupex &>/dev/nll
then
echo "安裝xtrabackup工具"
rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm && \
yum install -y percona-xtrabackup-24
if [ $? -ne 0 ]
then
echo "安裝xtrabackup工具出錯,請檢查。"
exit 1
fi
fi

bakdir=/data/backup/mysql
bakuser=vyNctM
bakpass=99omeaBHh

function bak_data {
db_name=$1
db_host=$2
db_port=$3
cnf=$4
[ -d $bakdir/$db_name ] || mkdir -p $bakdir/$db_name
innobackupex --defaults-file=$4 --host=$2 --port=$3 --user=$bakuser --password=$bakpass $bakdir/$1
if [ $? -ne 0 ]
then
echo "備份數據庫$1出現問題。"
fi
}

fifofile=/tmp/$$
mkfifo $fifofile
exec 1000<>$fifofile

thread=10
for ((i=0;i<$thread;i++))
do
echo >&1000
done

cat /tmp/databases.list | while read line
do
read -u1000
{
bak_data echo $line
echo >&1000
} &
done

wait
exec 1000>&-
rm -f $fifofile

練習97

之前咱們打印過正方形,也打印過乘法口訣,那今天來打印一個三角形(正三角形,元素用*表示)。

#!/bin/bash

while true
do
read -p "please input the lenth: " n
if [ -z $n ]
then
echo "要輸入一個數字。"
continue
else
n1=echo $n|sed 's/[0-9]//g'
if [ -n "$n1" ]
then
echo "你輸入的不是純數字,重新輸入。"
continue
else
break
fi
fi
done

for i in seq 1 $n
do
j=$[$n-$i]
for m in seq $j
do
echo -n " "
done

for p in `seq 1 $i` doecho -n "* " done echo

done

練習98

利用你學過的知識點,想辦法根據要求截取出字符。

字符串var=http://www.aaa.com/root/123.htm

1.取出www.aaa.com/root/123.htm

2.取出123.htm

3.取出http://www.aaa.com/root

4.取出http:

5.取出http://

6.取出root/123.htm

7.取出123

#!/bin/bash

var=http://www.aaa.com/root/123.htm
echo "1.取出www.aaa.com/root/123.htm"
echo $var |awk -F '//' '{print $2}'

echo "2.取出123.htm"
echo $var |awk -F '/' '{print $5}'

echo "3.取出http://www.aaa.com/root"
echo $var |sed 's#/123.htm##'

echo "4.取出http:"
echo $var |awk -F '//' '{print $1}'

echo "5.取出http://"
echo $var |awk -F 'www' '{print $1}'

echo "6.取出root/123.htm"
echo $var |awk -F 'com/' '{print $2}'
echo $var |awk -F '/' '{print $4"/"$5}'

echo "7.取出123"
echo $var |sed 's/[^0-9]//g'

練習99
請把下面的字符串:

zhangsan y97JbzPru lisi 5JhvCls6q xiaowang Nnr8qt2Ma laoma iqMtvC02y zhaosi 9fxrb4sJD

改為如下:

zhangsan:y97JbzPru lisi:5JhvCls6q xiaowang:Nnr8qt2Ma laoma:iqMtvC02y zhaosi:9fxrb4sJD

#!/bin/bash

n=wc -l test3.txt|awk '{print $1}'
n2=$[$n/2]

for i in seq 1 $n2
do
i2=$[$i*2]
j=$[$i2-1]
l1=sed -n "$i2"p test3.txt
l2=sed -n "$j"p test3.txt
echo $l2:$l1
done

練習100
linux系統的rm命令太危險,一不小心就會刪除掉系統文件。 寫一個shell腳本來替換系統的rm命令,要求當刪除一個文件或者目錄時,都要做一個備份,然后再刪除。下面分兩種情況,做練習:

  • 簡單
  • 假設有一個大的分區/data/,每次刪除文件或者目錄之前,都要先在/data/下面創建一個隱藏目錄,以日期/時間命名,比如/data/.201703271012/,然后把所有刪除的文件同步到該目錄下面,可以使用rsync -R 把文件路徑一起同步

  • 復雜
  • 不知道哪個分區有剩余空間,在刪除之前先計算要刪除的文件或者目錄大小,然后對比系統的磁盤空間,如果夠則按照上面的規則創建隱藏目錄,并備份,如果沒有足夠空間,要提醒用戶沒有足夠
    的空間備份并提示是否放棄備份,如果用戶選擇y,則直接刪除文件或者目錄,如果選擇n,則提示未刪除,然后退出腳本。

  • 簡單
    #!/bin/bash
  • filename=$1
    big_filesystem=/data/

    if [ ! -e $1 ]
    then
    echo "$1 不存在,請使用絕對路徑"
    exit
    fi
    d=date +%Y%m%d%H%M
    read -p "Are U sure delete the file or directory $1? y|n: " c
    case $c in
    y|Y)
    mkdir -p $big_filesystem/.$d && rsync -aR $1 $big_filesystem/.$d/$1 && /bin/rm -rf $1
    ;;
    n|N)
    exit 0
    ;;
    *)
    echo "Please input 'y' or 'n'."
    ;;
    esac

    2.復雜
    #!/bin/bash
    filename=$1

    if [ ! -e $1 ]
    then
    echo "$1 不存在,請使用絕對路徑"
    exit
    fi
    d=date +%Y%m%d%H%M
    f_size=du -sk $1|awk '{print $1}'
    disk_size=LANG=en; df -k |grep -vi filesystem|awk '{print $4}' |sort -n |tail -n1
    big_filesystem=LANG=en; df -k |grep -vi filesystem |sort -n -k4 |tail -n1 |awk '{print $NF}'

    if [ $f_size -lt $disk_size ]
    then
    read -p "Are U sure delete the file or directory: $1? y|n: " c
    case $c in
    y|Y)
    mkdir -p $big_filesystem/.$d && rsync -aR $1 $big_filesystem/.$d/$1 && /bin/rm -rf $1
    ;;
    n|N)
    exit 0
    ;;
    )
    echo "Please input 'y' or 'n'."
    ;;
    esac
    else
    echo "The disk size is not enough to backup the files $1."
    read -p "Do you want to delete $1? y|n: " c
    case $c in
    y|Y)
    echo "It will delete $1 after 5 seconds whitout backup."
    for i in seq 1 5; do echo -ne ". "; sleep 1;done
    echo
    /bin/rm -rf $1
    ;;
    n|N)
    echo "It will not delete $1."
    exit 0
    ;;
    )
    echo "Please input 'y' or 'n'."
    ;;
    esac
    fi

    轉載于:https://blog.51cto.com/12898947/2347450

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的shell训练营Day31的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。