shell練習題

 

  

20、編寫批量修改擴展名腳本

#!/bin/bash
# 編寫批量修改擴展名腳本,如批量將 txt 文件修改成 doc 文件 
# 執行腳本時,須要給腳本添加位置參數
# 腳本名  txt  doc(能夠將 txt 的擴展名修改成 doc)
# 腳本名  doc  jpg(能夠將 doc 的擴展名修改成 jpg)
 
for i in "ls *.$1"
do
   	mv $i ${i%.*}.$2
done  

釋:php

假設定義了一個變量爲,【代碼以下】:

file=/dir1/dir2/dir3/my.file.txt

能夠用${ }分別替換獲得不一樣的值:

${file#*/}:刪掉《=最後一個 / 及其左邊的字符串:dir1/dir2/dir3/my.file.txt

${file##*/}:刪掉 《= 第一個 /  及其左邊的字符串:my.file.txt

${file#*.}:刪掉第一個 .  及其左邊的字符串:file.txt

${file##*.}:刪掉最後一個 .  及其左邊的字符串:txt

${file%/*}:刪掉=》最後一個  /  及其右邊的字符串:/dir1/dir2/dir3

${file%%/*}:刪掉=》第一個 /  及其右邊的字符串:(空值)

${file%.*}:刪掉最後一個  .  及其右邊的字符串:/dir1/dir2/dir3/my.file

${file%%.*}:刪掉第一個  .   及其右邊的字符串:/dir1/dir2/dir3/my


【記憶的方法爲】:

# 是 去掉左邊(鍵盤上#在 $ 的左邊)

%是去掉右邊(鍵盤上% 在$ 的右邊)

單一符號是最小匹配;兩個符號是最大匹配

${file:0:5}:提取最左邊的 5 個字節:/dir1

${file:5:5}:提取第 5 個字節右邊的連續5個字節:/dir2

也能夠對變量值裏的字符串做替換:

${file/dir/path}:將第一個dir 替換爲path:/path1/dir2/dir3/my.file.txt

${file//dir/path}:將所有dir 替換爲 path:/path1/path2/path3/my.file.txt

  

 

1八、使用死循環實時顯示 eth0 網卡發送的數據包流量

#!/bin/bash
# 使用死循環實時顯示 eth0 網卡發送的數據包流量 
 
while :
do
 	echo  '本地網卡 eth0 流量信息以下: '
  	ifconfig eth0 | grep "RX pack" | awk '{print $5}'
    ifconfig eth0 | grep "TX pack" | awk '{print $5}'
   	sleep 1
done

  

1九、使用 user.txt 文件中的人員名單,在計算機中自動建立對應的帳戶並配置初始密碼本腳本執行,須要提早準備一個 user.txt 文件,該文件中包含有若干用戶名信息

#!/bin/bash
# 使用 user.txt 文件中的人員名單,在計算機中自動建立對應的帳戶並配置初始密碼
# 本腳本執行,須要提早準備一個 user.txt 文件,該文件中包含有若干用戶名信息
for i in `cat user.txt`
do
   	useradd  $i
   	echo "123456" | passwd ‐‐stdin $i
done

 

 

 

2一、使用 expect 工具自動交互密碼遠程其餘主機安裝 httpd 軟件

#!/bin/bash
# 使用 expect 工具自動交互密碼遠程其餘主機安裝 httpd 軟件 
 
# 刪除~/.ssh/known_hosts 後,ssh 遠程任何主機都會詢問是否確認要鏈接該主機
rm  ‐rf  ~/.ssh/known_hosts
expect <<EOF
spawn ssh 192.168.4.254
 
expect "yes/no" {send "yes\r"}
# 根據本身的實際狀況將密碼修改成真實的密碼字串
expect "password" {send  "密碼\r"}
expect "#" {send  "yum ‐y install httpd\r"}
expect "#" {send  "exit\r"}
EOF

  

 

五、監控內存和磁盤容量,小於給定值時報警

#!/bin/bash
# 實時監控本機內存和硬盤剩餘空間,剩餘內存小於500M、根分區剩餘空間小於1000M時,發送報警郵件給root管理員
 
# 提取根分區剩餘空間
disk_size=$(df / | awk '/\//{print $4}')
 
# 提取內存剩餘空間
mem_size=$(free | awk '/Mem/{print $4}')
while :
do
# 注意內存和磁盤提取的空間大小都是以 Kb 爲單位
if  [  $disk_size -le 512000 -a $mem_size -le 1024000  ]
then
    mail  ‐s  "Warning"  root  <<EOF
	Insufficient resources,資源不足
EOF
fi
done

  

八、檢測本機當前用戶是否爲超級管理員,若是是管理員,則使用 yum 安裝 vsftpd,若是不是,則提示您非管理員(使用 UID 數字對比版本)

#!/bin/bash
# 檢測本機當前用戶是否爲超級管理員,若是是管理員,則使用 yum 安裝 vsftpd,若是不
# 是,則提示您非管理員(使用 UID 數字對比版本)
if [ $UID -eq 0 ];then
    yum ‐y install vsftpd
else
    echo "您不是管理員,沒有權限安裝軟件"
fi

  

九、編寫腳本:提示用戶輸入用戶名和密碼,腳本自動建立相應的帳戶及配置密碼。若是用戶不輸入帳戶名,則提示必須輸入帳戶名並退出腳本;若是用戶不輸入密碼,則統一使用默認的 123456 做爲默認密碼。

#!/bin/bash
# 編寫腳本:提示用戶輸入用戶名和密碼,腳本自動建立相應的帳戶及配置密碼。若是用戶
# 不輸入帳戶名,則提示必須輸入帳戶名並退出腳本;若是用戶不輸入密碼,則統一使用默
# 認的 123456 做爲默認密碼。
 
read -p "請輸入用戶名: " user
#使用‐z 能夠判斷一個變量是否爲空,若是爲空,提示用戶必須輸入帳戶名,並退出腳本,退出碼爲 2
#沒有輸入用戶名腳本退出後,使用$?查看的返回碼爲 2
if [ -z $user ];then
   	echo "您不需輸入帳戶名"
 	exit 2
fi
#使用 stty ‐echo 關閉 shell 的回顯功能
#使用 stty  echo 打開 shell 的回顯功能
stty -echo
read -p "請輸入密碼: " pass
stty echo
pass=${pass:‐123456}
useradd "$user"
echo "$pass" | passwd ‐‐stdin "$user"

  

 

七、檢測本機當前用戶是否爲超級管理員,若是是管理員,則使用 yum 安裝 vsftpd,若是不是,則提示您非管理員(使用字串對比版本)

#!/bin/bash
# 檢測本機當前用戶是否爲超級管理員,若是是管理員,則使用 yum 安裝 vsftpd,若是不
# 是,則提示您非管理員(使用字串對比版本) 
if [ $USER == "root" ]
then
	yum ‐y install vsftpd
else
    echo "您不是管理員,沒有權限安裝軟件"
fi

  

 

2二、一鍵部署 LNMP(源碼安裝版本)

#!/bin/bash
# 一鍵部署 LNMP(源碼安裝版本)
menu()
{
clear
echo "  ##############‐‐‐‐Menu‐‐‐‐##############"
echo "# 1. Install Nginx"
echo "# 2. Install MySQL"
echo "# 3. Install PHP"
echo "# 4. Exit Program"
echo "  ########################################"
}
 
choice()
{
  read -p "Please choice a menu[1‐9]:" select
}
 
install_nginx()
{
  id nginx &>/dev/null
  if [ $? -ne 0 ];then
    useradd -s /sbin/nologin nginx
  fi
  if [ -f nginx‐1.8.0.tar.gz ];then
    tar -xf nginx‐1.8.0.tar.gz
    cd nginx‐1.8.0
    yum -y install  gcc pcre‐devel openssl‐devel zlib‐devel make
    ./configure ‐‐prefix=/usr/local/nginx ‐‐with‐http_ssl_module
    make
    make install
    ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
    cd ..
  else
    echo "沒有 Nginx 源碼包"
  fi
}
 
install_mysql()
{
  yum -y install gcc gcc‐c++ cmake ncurses‐devel perl
  id mysql &>/dev/null
  if [ $? -ne 0 ];then
    useradd -s /sbin/nologin mysql
  fi
  if [ -f mysql‐5.6.25.tar.gz ];then
    tar -xf mysql‐5.6.25.tar.gz
    cd mysql‐5.6.25
    cmake .
    make
    make install
    /usr/local/mysql/scripts/mysql_install_db ‐‐user=mysql ‐‐datadir=/usr/local/mysql/data/
‐‐basedir=/usr/local/mysql/
    chown -R root.mysql /usr/local/mysql
    chown -R mysql /usr/local/mysql/data
    /bin/cp -f /usr/local/mysql/support‐files/mysql.server /etc/init.d/mysqld
    chmod +x /etc/init.d/mysqld
    /bin/cp -f /usr/local/mysql/support‐files/my‐default.cnf /etc/my.cnf
    echo "/usr/local/mysql/lib/" >> /etc/ld.so.conf
    ldconfig
    echo 'PATH=\$PATH:/usr/local/mysql/bin/' >> /etc/profile
    export PATH
  else
    echo  "沒有 mysql 源碼包"
    exit
  fi
}
 
install_php()
{
#安裝 php 時沒有指定啓動哪些模塊功能,若是的用戶能夠根據實際狀況自行添加額外功能如‐‐with‐gd 等
yum  -y  install  gcc  libxml2‐devel
if [ -f mhash‐0.9.9.9.tar.gz ];then
  tar -xf mhash‐0.9.9.9.tar.gz
  cd mhash‐0.9.9.9
  ./configure
  make
  make install
  cd ..
if [ ! ‐f /usr/lib/libmhash.so ];then
  ln -s /usr/local/lib/libmhash.so /usr/lib/
fi
ldconfig
else
  echo "沒有 mhash 源碼包文件"
  exit
fi
if [ -f libmcrypt‐2.5.8.tar.gz ];then
  tar -xf libmcrypt‐2.5.8.tar.gz
  cd libmcrypt‐2.5.8
  ./configure
  make
  make install
  cd ..
  if [ ! -f /usr/lib/libmcrypt.so ];then  
    ln -s /usr/local/lib/libmcrypt.so /usr/lib/
  fi
  ldconfig
else
  echo "沒有 libmcrypt 源碼包文件"
  exit
fi
if [ -f php‐5.4.24.tar.gz ];then
  tar -xf php‐5.4.24.tar.gz
  cd php‐5.4.24
  ./configure  ‐‐prefix=/usr/local/php5  ‐‐with‐mysql=/usr/local/mysql  ‐‐enable‐fpm    ‐‐
  enable‐mbstring  ‐‐with‐mcrypt  ‐‐with‐mhash  ‐‐with‐config‐file‐path=/usr/local/php5/etc  ‐‐with‐
  mysqli=/usr/local/mysql/bin/mysql_config
  make && make install
  /bin/cp -f php.ini‐production /usr/local/php5/etc/php.ini
  /bin/cp -f /usr/local/php5/etc/php‐fpm.conf.default /usr/local/php5/etc/php‐fpm.conf
  cd ..
else
  echo "沒有 php 源碼包文件"
  exit
fi 
}
 
while :
do
  menu
  choice
  case $select in
  1)
    install_nginx
    ;;
  2)
    install_mysql
    ;;
  3)
    install_php
    ;;
  4)
    exit
    ;;
  *)
    echo Sorry!
  esac
done

  

 

2七、統計 13:30 到 14:30 全部訪問 apache 服務器的請求有多少個

#!/bin/bash
# 統計 13:30 到 14:30 全部訪問 apache 服務器的請求有多少個
 
# awk 使用‐F 選項指定文件內容的分隔符是/或者:
# 條件判斷$7:$8 大於等於 13:30,而且要求,$7:$8 小於等於 14:30
# 最後使用 wc ‐l 統計這樣的數據有多少行,即多少個
awk -F "[ /:]" '$7":"$8>="13:30" && $7":"$8<="14:30"' /var/log/httpd/access_log |wc -l

  

2八、統計 13:30 到 14:30 全部訪問本機 Aapche 服務器的遠程 IP 地址是什麼 

#!/bin/bash
# 統計 13:30 到 14:30 全部訪問本機 Aapche 服務器的遠程 IP 地址是什麼 
# awk 使用‐F 選項指定文件內容的分隔符是/或者:
# 條件判斷$7:$8 大於等於 13:30,而且要求,$7:$8 小於等於 14:30
# 日誌文檔內容裏面,第 1 列是遠程主機的 IP 地址,使用 awk 單獨顯示第 1 列便可
awk -F "[ /:]" '$7":"$8>="13:30" && $7":"$8<="14:30"{print $1}' /var/log/httpd/access_log

  

2五、查看有多少遠程的 IP 在鏈接本機

#!/bin/bash
# 查看有多少遠程的 IP 在鏈接本機(不論是經過 ssh 仍是 web 仍是 ftp 都統計) 
 
# 使用 netstat ‐atn 能夠查看本機全部鏈接的狀態,‐a 查看全部,
# -t僅顯示 tcp 鏈接的信息,‐n 數字格式顯示
# Local Address(第四列是本機的 IP 和端口信息)
# Foreign Address(第五列是遠程主機的 IP 和端口信息)
# 使用 awk 命令僅顯示第 5 列數據,再顯示第 1 列 IP 地址的信息
# sort 能夠按數字大小排序,最後使用 uniq 將多餘重複的刪除,並統計重複的次數
netstat -atn  |  awk  '{print $5}'  | awk  '{print $1}' | sort -nr  |  uniq -c

  

2三、編寫腳本快速克隆 KVM 虛擬機

#!/bin/bash
# 編寫腳本快速克隆 KVM 虛擬機
 
# 本腳本針對 RHEL7.2 或 Centos7.2
# 本腳本須要提早準備一個 qcow2 格式的虛擬機模板,
# 名稱爲/var/lib/libvirt/images  /.rh7_template 的虛擬機模板
# 該腳本使用 qemu‐img 命令快速建立快照虛擬機
# 腳本使用 sed 修改模板虛擬機的配置文件,將虛擬機名稱、UUID、磁盤文件名、MAC 地址
# exit code:  
#    65 ‐> user input nothing
#    66 ‐> user input is not a number
#    67 ‐> user input out of range
#    68 ‐> vm disk image exists
 
IMG_DIR=/var/lib/libvirt/images
BASEVM=rh7_template
read -p "Enter VM number: " VMNUM
if [ $VMNUM -le 9 ];then
VMNUM=0$VMNUM
fi
 
if [ -z "${VMNUM}" ]; then
    echo "You must input a number."
    exit 65
elif [[  ${VMNUM} =~ [a‐z]  ]; then
    echo "You must input a number."
    exit 66
elif [ ${VMNUM} -lt 1 -o ${VMNUM} -gt 99 ]; then
    echo "Input out of range"
    exit 67
fi
 
NEWVM=rh7_node${VMNUM}
 
if [ -e $IMG_DIR/${NEWVM}.img ]; then
    echo "File exists."
    exit 68
fi
 
echo -en "Creating Virtual Machine disk image......\t"
qemu‐img create -f qcow2 ‐b $IMG_DIR/.${BASEVM}.img $IMG_DIR/${NEWVM}.img &> /dev/null
 
echo -e "\e[32;1m[OK]\e[0m"
 
#virsh dumpxml ${BASEVM} > /tmp/myvm.xml
cat /var/lib/libvirt/images/.rhel7.xml > /tmp/myvm.xml
sed -i "/<name>${BASEVM}/s/${BASEVM}/${NEWVM}/" /tmp/myvm.xml
sed -i "/uuid/s/<uuid>.*<\/uuid>/<uuid>$(uuidgen)<\/uuid>/" /tmp/myvm.xml
sed -i "/${BASEVM}\.img/s/${BASEVM}/${NEWVM}/" /tmp/myvm.xml
 
# 修改 MAC 地址,本例使用的是常量,每位使用該腳本的用戶須要根據實際狀況修改這些值 
# 最好這裏可使用便利,這樣更適合於批量操做,能夠克隆更多虛擬機 
sed -i "/mac /s/a1/0c/" /tmp/myvm.xml
 
echo -en "Defining new virtual machine......\t\t"
virsh define /tmp/myvm.xml &> /dev/null
echo -e "\e[32;1m[OK]\e[0m"

  

 

#!/bin/bash
# 打印國際象棋棋盤
# 設置兩個變量,i 和 j,一個表明行,一個表明列,國際象棋爲 8*8 棋盤
# i=1 是表明準備打印第一行棋盤,第 1 行棋盤有灰色和藍色間隔輸出,總共爲 8 列
# i=1,j=1 表明第 1 行的第 1 列;i=2,j=3 表明第 2 行的第 3 列
# 棋盤的規律是 i+j 若是是偶數,就打印藍色色塊,若是是奇數就打印灰色色塊
# 使用 echo ‐ne 打印色塊,而且打印完成色塊後不自動換行,在同一行繼續輸出其餘色塊
for i in {1..8}
do
  	for j in {1..8}
  	do
  		sum=$[i+j]
		if [  $[sum%2] -eq 0 ];then
 			echo -ne "\033[46m  \033[0m"
		else
			echo -ne "\033[47m  \033[0m"
		fi
  	done
  	echo
done

  

 

3八、切割 Nginx 日誌文件(防止單個文件過大,後期處理很困難)

#mkdir  /data/scripts
#vim   /data/scripts/nginx_log.sh  
#!/bin/bash
# 切割 Nginx 日誌文件(防止單個文件過大,後期處理很困難) 
logs_path="/usr/local/nginx/logs/"
mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1  `cat /usr/local/nginx/logs/nginx.pid`
 
# chmod +x  /data/scripts/nginx_log.sh
# crontab  ‐e                    #腳本寫完後,將腳本放入計劃任務天天執行一次腳本
0  1  *  *   *   /data/scripts/nginx_log.sh

  

3九、檢測 MySQL 數據庫鏈接數量

#!/bin/bash
# 檢測 MySQL 數據庫鏈接數量 
 
# 本腳本每 2 秒檢測一次 MySQL 併發鏈接數,能夠將本腳本設置爲開機啓動腳本,或在特定時間段執行
# 以知足對 MySQL 數據庫的監控需求,查看 MySQL 鏈接是否正常
# 本案例中的用戶名和密碼須要根據實際狀況修改後方可以使用
log_file=/var/log/mysql_count.log
user=root
passwd=123456
while :
do
    sleep 2
    count=`mysqladmin  -u  "$user"  -p  "$passwd"   status |  awk '{print $4}'`
    echo "`date +%Y‐%m‐%d` 併發鏈接數爲:$count" >> $log_file
done

  

4一、檢測 MySQL 服務是否存活

#!/bin/bash
# 檢測 MySQL 服務是否存活 
 
# host 爲你須要檢測的 MySQL 主機的 IP 地址,user 爲 MySQL 帳戶名,passwd 爲密碼
# 這些信息須要根據實際狀況修改後方可以使用
host=192.168.51.198
user=root
passwd=123456
mysqladmin -h '$host' -u '$user' -p'$passwd' ping &>/dev/null
if [ $? -eq 0 ]
then
        echo "MySQL is UP"
else
        echo "MySQL is down"
fi

  

3二、統計/var/log 有多少個文件,並顯示這些文件名

#!/bin/bash
# 統計/var/log 有多少個文件,並顯示這些文件名 
# 使用 ls 遞歸顯示全部,再判斷是否爲文件,若是是文件則計數器加 1
cd  /var/log
sum=0
for i in `ls -r *`
do
 	if [ -f $i ];then
     	let sum++
       	echo "文件名:$i"
   	fi
done
echo "總文件數量爲:$sum"

  

 

3六、自動對磁盤分區、格式化、掛載

 #!/bin/bash
 
# 自動對磁盤分區、格式化、掛載
# 對虛擬機的 vdb 磁盤進行分區格式化,使用<<將須要的分區指令導入給程序 fdisk
# n(新建分區),p(建立主分區),1(分區編號爲 1),兩個空白行(兩個回車,至關於將整個磁盤分一個區)
# 注意:1 後面的兩個回車(空白行)是必須的!
fdisk /dev/vdb << EOF
n
p
1
 
 
wq
EOF
 
#格式化剛剛建立好的分區
mkfs.xfs   /dev/vdb1
 
#建立掛載點目錄
if [ -e /data ]; then
exit
fi
mkdir /data
 
#自動掛載剛剛建立的分區,並設置開機自動掛載該分區
echo '/dev/vdb1     /data    xfs    defaults        1 2'  >> /etc/fstab
mount -a

  

3五、編寫 nginx 啓動腳本

#!/bin/bash
# 編寫 nginx 啓動腳本 
# 本腳本編寫完成後,放置在/etc/init.d/目錄下,就能夠被 Linux 系統自動識別到該腳本
# 若是本腳本名爲/etc/init.d/nginx,則 service nginx start 就能夠啓動該服務
# service nginx stop 就能夠關閉服務
# service nginx restart 能夠重啓服務
# service nginx status 能夠查看服務狀態
 
program=/usr/local/nginx/sbin/nginx
pid=/usr/local/nginx/logs/nginx.pid
start(){
if [ -f $pid ];then
  echo  "nginx 服務已經處於開啓狀態"
else
  $program
fi
stop(){
if [ -! -f $pid ];then
  echo "nginx 服務已經關閉"
else
  $program -s stop
  echo "關閉服務 ok"
fi
}
status(){
if [ -f $pid ];then
  echo "服務正在運行..."
else
  echo "服務已經關閉"
fi
}
 
case $1 in
start)
  start;;
stop)
  stop;;
restart)
  stop
  sleep 1
  start;;
status)
  status;;
*)
  echo  "你輸入的語法格式錯誤"
esac

  

 

#!/bin/bash
# 判斷文件或目錄是否存在 
 
if [ $# -eq 0 ] ;then
echo "未輸入任何參數,請輸入參數"
echo "用法:$0 [文件名|目錄名]"
fi
if [ -f $1 ];then
	echo "該文件,存在"
	ls -l $1
else
	echo "沒有該文件"
fi
if [ -d  $1 ];then
   	echo "該目錄,存在"
   	ls -ld  $2
else
   	echo "沒有該目錄"
fi

  

#!/bin/bash
# 關閉 SELinux 
 
sed -i  '/^SELINUX/s/=.*/=disabled/' /etc/selinux/config
setenforce 0

  8七、Shell 腳本對信號的處理,執行腳本後,按鍵盤 Ctrl+C 沒法終止的腳本html

#!/bin/bash
# Shell 腳本對信號的處理,執行腳本後,按鍵盤 Ctrl+C 沒法終止的腳本 
 
# 使用 trap 命令能夠攔截用戶經過鍵盤或 kill 命令發送過來的信號
# 使用 kill ‐l 能夠查看 Linux 系統中全部的信號列表,其中 2 表明 Ctrl+C
# trap 當發現有用戶 ctrl+C 但願終端腳本時,就執行 echo "暫停 10s";sleep 10 這兩條命令
# 另外用戶使用命令:[ kill ‐2 腳本的 PID ] 也能夠中斷腳本和 Ctrl+C 同樣的效果,都會被 trap 攔截
trap 'echo "暫停 10s";sleep 10' 2
while :
do
	echo "go go go"
done

  使用腳本開啓關閉虛擬機node

#!/bin/bash
# 使用腳本開啓關閉虛擬機 
 
# 腳本經過調用virsh命令實現對虛擬機的管理,若是沒有該命令,須要安裝 libvirt‐client 軟件包
# $1是腳本的第1個參數,$2是腳本的第2個參數
# 第1個參數是你但願對虛擬機進行的操做指令,第2個參數是虛擬機名稱
case $1 in
  list)
    virsh list --all
    ;;
  start)
    virsh start $2
    ;;
  stop)
    virsh destroy $2
    ;;
  enable)
    virsh autostart $2
    ;;
  disable)
    virsh autostart --disable $2
    ;;
  *)
    echo "Usage:$0 list"
    echo "Usage:$0 [start|stop|enable|disable]  VM_name"
    cat << EOF
    #list      顯示虛擬機列表
    #start     啓動虛擬機
    #stop      關閉虛擬機
    #enable    設置虛擬機爲開機自啓
    #disable   關閉虛擬機開機自啓功能
    EOF
    ;;
esac

  

80、顯示本機 Linux 系統上全部開放的端口列表python

#!/bin/bash
# 顯示本機 Linux 系統上全部開放的端口列表 

# 從端口列表中觀測有沒有沒用的端口,有的話能夠將該端口對應的服務關閉,防止意外的攻擊可能性
ss -nutlp | awk '{print $1,$5}' | awk -F"[: ]" '{print "協議:"$1,"端口號:"$NF}' | grep "[0‐9]" | uniq

  

 

8一、將 Linux 系統中 UID 大於等於 1000 的普通用戶都刪除

#!/bin/bash
# 將 Linux 系統中 UID 大於等於 1000 的普通用戶都刪除 
 
# 先用 awk 提取全部 uid 大於等於 1000 的普通用戶名稱
# 再使用 for 循環逐個將每一個用戶刪除便可
user=$(awk -F: '$3>=1000{print $1}' /etc/passwd)
for i in $user
do
   	userdel -r $i
done

  

 

7九、判斷用戶輸入的是 Yes 或 NO

#!/bin/bash
# 判斷用戶輸入的是 Yes 或 NO 
 
read -p  "Are you sure?[y/n]:"  sure
case  $sure  in
	y|Y|Yes|YES)  
		echo "you enter $a"
		;;
    n|N|NO|no)
 		echo "you enter $a"
 		;;
    *)
 		echo "error";;
esac

  

 

7六、判斷用戶輸入的數據類型(字母、數字或其餘) mysql

#!/bin/bash
# 判斷用戶輸入的數據類型(字母、數字或其餘) 
read -p "請輸入一個字符:" KEY
case "$KEY" in
	[a‐z]|[A‐Z])
		echo "字母" 
		;;
	[0‐9])
		echo "數字" 
		;;
	*)
		echo "空格、功能鍵或其餘控制字符"
esac

  

7四、統計 Linux 進程相關數量信息linux

#!/bin/bash
# 統計 Linux 進程相關數量信息 
 
running=0
sleeping=0
stoped=0
zombie=0
# 在 proc 目錄下全部以數字開始的都是當前計算機正在運行的進程的進程 PID
# 每一個 PID 編號的目錄下記錄有該進程相關的信息
for pid in /proc/[1‐9]*
do
	procs=$[procs+1]
	stat=$(awk '{print $3}' $pid/stat)
# 每一個 pid 目錄下都有一個 stat 文件,該文件的第 3 列是該進程的狀態信息
  	case $stat in
  	R)
		running=$[running+1]
		;;
  	T)
		stoped=$[stoped+1]
		;;
  	S)
		sleeping=$[sleeping+1]
		;;
  	Z)
 		zombie=$[zombie+1]
 		;;
  	esac
done
echo "進程統計信息以下"
echo "總進程數量爲:$procs"
echo "Running 進程數爲:$running"
echo "Stoped 進程數爲:$stoped"
echo "Sleeping 進程數爲:$sleeping"
echo "Zombie 進程數爲:$zombie"

  70、自動修改計劃任務配置文件nginx

#!/bin/bash
# 自動修改計劃任務配置文件 
 
read -p "請輸入分鐘信息(00‐59):" min
read -p "請輸入小時信息(00‐24):" hour
read -p "請輸入日期信息(01‐31):" date
read -p "請輸入月份信息(01‐12):" month
read -p "請輸入星期信息(00‐06):" weak
read -p "請輸入計劃任務須要執行的命令或腳本:" program
echo "$min $hour $date $month $weak $program" >> /etc/crontab

 6九、設置 Python 支持自動命令補齊功能c++

#!/bin/bash
# 設置 Python 支持自動命令補齊功能 
 
# Summary:Enable tab complete for python
# Description:
 
Needs import readline and rlcompleter module
#
import readline
#
import rlcompleter
#
help(rlcompleter) display detail: readline.parse_and_bind('tab: complete')
#
man python display detail: PYTHONSTARTUP variable
 
if  [ ! -f /usr/bin/tab.py ];then
	cat >> /usr/bin/tab.py <<EOF
import readline
import rlcompleter
readline.parse_and_bind('tab: complete')
EOF
fi
sed  -i '$a export PYTHONSTARTUP=/usr/bin/tab.py' /etc/profile
source /etc/profile

  

6八、修改 Linux 系統的最大打開文件數量

#!/bin/bash
# 修改 Linux 系統的最大打開文件數量 
 
# 往/etc/security/limits.conf 文件的末尾追加兩行配置參數,修改最大打開文件數量爲 65536
cat >> /etc/security/limits.conf <<EOF
* soft nofile  65536
* hard nofile  65536
EOF

  

[root@xuegod-master ~]# ip a | awk 'BEGIN{print  " 本 機 MAC 地 址 信 息 如 下 :"}{if(/inet /){print $2}}' | grep -v "127.0.0.1/8"
 本 機 MAC 地 址 信 息 如 下 :
192.168.1.129/24

[root@xuegod-master ~]# ip a | awk 'BEGIN{print  " 本 機 MAC 地 址 信 息 如 下 :"}{if(/link\/ether/){print $2}}'
 本 機 MAC 地 址 信 息 如 下 :
00:0c:29:ed:bb:ce

  

6二、制定目錄路徑,腳本自動將該目錄使用 tar 命令打包備份到/data目錄

#!/bin/bash
# 制定目錄路徑,腳本自動將該目錄使用 tar 命令打包備份到/data目錄 
 
[ ! -d /data ] && mkdir /data
[ -z $1 ] && exit
if [ -d $1 ];then
	tar -czf /data/$1.-`date +%Y%m%d`.tar.gz $1
else
  	echo "該目錄不存在"
fi

  

5一、查找 Linux 系統中的殭屍進程

#!/bin/bash
# 查找 Linux 系統中的殭屍進程
 
# awk 判斷 ps 命令輸出的第 8 列爲 Z 是,顯示該進程的 PID 和進程命令
ps aux | awk '{if($8 == "Z"){print $2,$11}}'

  

50、刪除某個目錄下大小爲 0 的文件

#!/bin/bash
# 刪除某個目錄下大小爲 0 的文件
 
#/var/www/html 爲測試目錄,腳本會清空該目錄下全部 0 字節的文件
dir="/var/www/html"
find $dir -type f -size 0 -exec rm -rf {} \;

  

4八、使用腳本自動建立邏輯卷

#!/bin/bash
# 使用腳本自動建立邏輯卷 
 
# 清屏,顯示警告信息,建立將磁盤轉換爲邏輯卷會刪除數據
clear
echo -e "\033[32m           !!!!!!警告(Warning)!!!!!!\033[0m"
echo
echo "+++++++++++++++++++++++++++++++++++++++++++++++++"
echo "腳本會將整個磁盤轉換爲 PV,並刪除磁盤上全部數據!!!"
echo "This Script will destroy all data on the Disk"
echo "+++++++++++++++++++++++++++++++++++++++++++++++++"
echo
read -p "請問是否繼續 y/n?:" sure
 
# 測試用戶輸入的是否爲 y,若是不是則退出腳本
[ $sure != y ] && exit
 
# 提示用戶輸入相關參數(磁盤、卷組名稱等數據),並測試用戶是否輸入了這些值,若是沒有輸入,則腳本退出
read -p "請輸入磁盤名稱,如/dev/vdb:" disk
[ -z $disk ] && echo "沒有輸入磁盤名稱" && exit
read -p "請輸入卷組名稱:" vg_name
[ -z $vg_name ] && echo "沒有輸入卷組名稱" && exit
read -p "請輸入邏輯卷名稱:" lv_name
[ -z $lv_name ] && echo "沒有輸入邏輯卷名稱" && exit
read -p "請輸入邏輯卷大小:" lv_size
[ -z $lv_size ] && echo "沒有輸入邏輯卷大小" && exit
 
# 使用命令建立邏輯卷
pvcreate $disk
vgcreate $vg_name $disk
lvcreate -L ${lv_size}M -n ${lv_name}  ${vg_name}

  

4二、備份 MySQL 的 shell 腳本(mysqldump版本)

#!/bin/bash
# 備份 MySQL 的 shell 腳本(mysqldump版本) 
 
# 定義變量 user(數據庫用戶名),passwd(數據庫密碼),date(備份的時間標籤)
# dbname(須要備份的數據庫名稱,根據實際需求須要修改該變量的值,默認備份 mysql 數據庫)
 
user=root
passwd=123456
dbname=mysql
date=$(date +%Y%m%d)
 
# 測試備份目錄是否存在,不存在則自動建立該目錄
[ ! -d /mysqlbackup ] && mkdir /mysqlbackup
# 使用 mysqldump 命令備份數據庫
mysqldump -u "$user" -p "$passwd" "$dbname" > /mysqlbackup/"$dbname"-${date}.sql

  

 

8二、使用腳本開啓關閉虛擬機

#!/bin/bash
# 使用腳本開啓關閉虛擬機 
 
# 腳本經過調用virsh命令實現對虛擬機的管理,若是沒有該命令,須要安裝 libvirt‐client 軟件包
# $1是腳本的第1個參數,$2是腳本的第2個參數
# 第1個參數是你但願對虛擬機進行的操做指令,第2個參數是虛擬機名稱
case $1 in
  list)
    virsh list --all
    ;;
  start)
    virsh start $2
    ;;
  stop)
    virsh destroy $2
    ;;
  enable)
    virsh autostart $2
    ;;
  disable)
    virsh autostart --disable $2
    ;;
  *)
    echo "Usage:$0 list"
    echo "Usage:$0 [start|stop|enable|disable]  VM_name"
    cat << EOF
    #list      顯示虛擬機列表
    #start     啓動虛擬機
    #stop      關閉虛擬機
    #enable    設置虛擬機爲開機自啓
    #disable   關閉虛擬機開機自啓功能
    EOF
    ;;
esac
相關文章
相關標籤/搜索