關鍵點:命令寫法python
一、$RANDOM 的使用格式shell
二、反引號 用於執行命令bash
三、let 整數自加1的用法服務器
四、引用局部變量,${ }格式app
五、elif 後面也要跟 ;thenssh
#!/bin/bash #*************猜數遊戲************* i=0 #記錄猜數次數 num2=`echo $RANDOM | cut -c 1-2` #目標數指定隨機值 while true #死循環 do read -p "請輸入兩位整數:" num1 #輸入競猜初始值 if [ ${num1} -gt ${num2} ];then #若是猜的比目標數大 echo "比 ${num1} 小" #提示輸入值偏大 let i++ #猜錯次數加1 elif [ ${num1} -lt ${num2} ];then #若是猜的比目標數小 echo "比 ${num1} 大" #提示輸入值偏小 let i++ #猜錯次數加1 else echo "猜對了:就是 ${num2} " #輸出猜對的結果 echo "一共猜錯了 ${i} 次 " #輸出猜錯次數 break #跳出循環 fi done
關鍵點:美觀度調整方法函數
一、調用內部文件方法 .[空格] 加密
二、echo -n 不空行輸出spa
三、"黑洞文件" /dev/null 該目錄存放條件判斷結果,不會呈現給用戶,使輸出簡潔插件
四、使用 nohup bash ping_ip.sh & 屏蔽ping的過程 ("&"指在後臺運行 "nohup"指關閉終端仍繼續運行)
可以使用 ps aux | grep "ping_ip.sh" 過濾出來後,使用kill -9 終止
#!/bin/bash #*********************檢測同網段中ip********************** . /etc/init.d/functions #調用內部文件 ip=192.168.9. #指定網段 for i in `seq 1 255` #截取從1~255的ip do if ping -c 1 -w 1 ${ip}${i} &>/dev/null ;then #ping ip反饋信息寫入黑洞文件 echo -n "${ip}${i}" #打印ip success #使用functions函數,美觀展現 echo "" echo "${ip}${i}">>/root/bash/ping_ip.txt #將在線ip輸出至文檔 #echo "${ip}${i} 在線" else echo -n "${ip}${i}" #打印ip failure #使用functions函數,美觀展現 echo "" #echo "${ip}${i} 不在線" fi done
關鍵點:嵌套
一、注意嵌套縮進
#!/bin/bash #**********************九九乘法表***************** for i in `seq 1 9` #取數字1~9 do for j in `seq ${i} 9` #取數字從i~9 do echo -n " ${i} * ${j} = $((i*j)) " #相乘不換行 done echo -e "\n" #第一個因數改變後換行 done
關鍵點:
一、加密方法——key=`echo $RANDOM | md5sum | cut -c 1-8`
二、帳號密碼匹配——echo "${key} | passwd --stdin user${i}"
#!/bin/bash #********************批量建立用戶並設置隨機登陸密碼******************* for i in `seq 1 100` #取數1~100 do useradd user${i} #批量創建用戶user1~user100 key=`echo $RANDOM|md5sum|cut -c 1-8` #製做加密密碼 echo ${key}|passwd --stdin user${i} #帳號密碼匹配 echo -e "帳號:user${i} \n密碼:${key}" >> /root/bash/passwd_100.txt #將生成的帳戶密碼寫入文件保存 done
關鍵點:
一、shell變量 $? 能夠反饋上一步命令執行情況
#!/bin/bash systemctl restart network #重啓網卡 if [ "$?" == 0 ];then #判斷前一步是否執行成功 echo "成功重啓" else echo "失敗" fi
關鍵點:
一、服務器端和客戶端各編輯一個shell腳本,兩個腳本的運行經過ssh免密遠程登陸實現
#!/bin/bash read -p "請輸入客戶端ip地址:" ip #共享至客戶端ip read -p "請輸入服務端共享文件絕對路徑:" dir1 #共享的文件 yum install nfs-utils rpcbind -y #下載nfs服務及其依賴rpcbind if [ -e "$dir1" ];then #判斷共享文件是否存在 chown -R nfsnobody: $dir1 #若是存在,更改屬主爲nfsnobody else mkdir $dir1 #若是不存在,建立一個共享目錄 chown -R nfsnobody: $dir1 #更改屬主爲nfsnobody fi echo "$dir1 $ip/24(rw)">>/etc/exports #編輯配置文件 systemctl restart nfs rpcbind #重啓服務端nfs和依賴rpcbind if [ $? == 0 ];then #檢測服務端nfs服務是否部署成功 echo "服務器端nfs部署成功" ssh-keygen #生成登陸密鑰 echo "******請輸入${ip}的密碼*********" ssh-copy-id $ip #傳輸公鑰 if [ $? == 0 ];then #檢測公鑰是否傳輸成功 echo "免密登陸成功" ssh $ip #登陸客戶端 else echo "客戶端登陸失敗" fi else echo "服務器端nfs部署失敗" fi
#!/bin/bash read -p "請輸入服務端的ip地址:" ip read -p "請輸入服務端共享文件絕對路徑:" dir1 read -p "請輸入客戶端共享文件掛載的絕對路徑:" dir2 yum install nfs-utils -y #下載客戶端nfs服務 showmount -e $ip #查看共享文件 if [ $? == 0 ];then #nfs服務是否下載成功 if [ -e "$dir2" ];then #若是掛載點存在,直接掛載並查看 mount -t nfs $ip:$dir1 $dir2 df -h else #若是掛載點不存在,建立掛載點並掛載查看 mkdir $dir2 mount -t nfs $ip:$dir1 $dir2 df -h fi echo "客戶端掛載成功" else echo "服務端共享文件接收失敗" fi
[root@localhost bash]# bash nfs.sh
請輸入客戶端ip地址:192.168.160.130
請輸入服務端共享文件絕對路徑:/root/nfs
已加載插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
軟件包 1:nfs-utils-1.3.0-0.61.el7.x86_64 已安裝而且是最新版本
軟件包 rpcbind-0.2.0-47.el7.x86_64 已安裝而且是最新版本
無須任何處理
服務器端nfs部署成功
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)?
******請輸入192.168.160.130的密碼*********
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed/usr/bin/ssh-copy-id: WARNING: All keys were skipped because they already exist on the remote system.
免密登陸成功
Last login: Sun Jun 2 03:56:38 2019 from 192.168.160.99[root@localhost ~]# ls
anaconda-ks.cfg bash lv_sgy
[root@localhost ~]# cd bash/
[root@localhost bash]# bash nfs.sh
請輸入服務端的ip地址:192.168.160.99
請輸入服務端共享文件絕對路徑:/root/nfs
請輸入客戶端共享文件掛載的絕對路徑:/root/nfs_server
已加載插件:fastestmirror
Loading mirror speeds from cached hostfile
軟件包 1:nfs-utils-1.3.0-0.61.el7.x86_64 已安裝而且是最新版本
無須任何處理
Export list for 192.168.160.99:
/root/nfs 192.168.160.130/24
文件系統 容量 已用 可用 已用% 掛載點
/dev/mapper/cl-root 17G 1.3G 16G 8% /
devtmpfs 478M 0 478M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 13M 476M 3% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 1014M 139M 876M 14% /boot
/dev/sr0 4.1G 4.1G 0 100% /mnt
tmpfs 98M 0 98M 0% /run/user/0
192.168.160.99:/root/nfs 17G 4.9G 13G 29% /root/nfs_server
客戶端掛載成功
[root@localhost bash]#[root@localhost bash]# cd
[root@localhost ~]# ls
anaconda-ks.cfg bash lv_sgy nfs_server
[root@localhost ~]# touch ./nfs_server/a.txt
[root@localhost ~]# cd nfs_server/
[root@localhost nfs_server]# ls
a.txt
[root@localhost nfs_server]#[root@localhost nfs_server]# exit
登出
Connection to 192.168.160.130 closed.
[root@localhost bash]# cd
[root@localhost ~]# ls
bash nfs 公共 模板 視頻 圖片 文檔 下載 音樂 桌面
[root@localhost ~]# ll nfs
總用量 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 6月 2 16:45 a.txt
[root@localhost ~]#
關鍵點:
一、在cut時會出現部分不顯示,但遍歷以後不會有影響
#!/bin/bash sum=0 for i in `find /root -type f -a -name "*.sh"` do size=`ls -l $i | cut -d " " -f 5` let sum+=size done echo "總大小爲$(($sum/1024))kb"
關鍵點:
一、grep -r 遞歸查詢
二、grep -l 返回目錄
[root@localhost bash]# find /usr/share/doc -type f |xargs grep -rl "sgy"
/usr/share/doc/libxslt-1.1.28/ChangeLog.gz
/usr/share/doc/libusal-1.1.11/Changelog
/usr/share/doc/opus-1.0.2/rfc6716.txt
grep: /usr/share/doc/python-setuptools-0.9.8/CHANGES: 沒有那個文件或目錄
grep: (links).txt: 沒有那個文件或目錄
/usr/share/doc/gcc-4.8.5/ChangeLog-2006.bz2
/usr/share/doc/yelp-3.14.2/NEWS
/usr/share/doc/gnome-packagekit-common-3.14.3/NEWS
/usr/share/doc/file-roller-3.14.2/NEWS
/usr/share/doc/gnome-software-3.14.7/NEWS
/usr/share/doc/gnome-system-monitor-3.14.1/NEWS
/usr/share/doc/wodim-1.1.11/Changelog
grep: /usr/share/doc/stix-fonts-1.1.0/STIX: 沒有那個文件或目錄
grep: Font: 沒有那個文件或目錄
grep: License: 沒有那個文件或目錄
grep: 2010.pdf: 沒有那個文件或目錄
#!/bin/bash read -p "輸入想要查找的文件關鍵詞:" key for i in `find /root -type f` do if cat "$i" | grep "$key" &>/dev/null;then echo "$i" sleep 1 fi done
關鍵點:
一、單位默認是K
#!/bin/bash for i in `find /root -size +100 -a -type f` do mv $i /tmp done
關鍵點:
一、$*的使用,表示全部參數($# 是統計參數個數)
#!/bin/bash sum=0 for i in $* do let sum+=i done echo "$sum" ~
#!/bin/bash cat /etc/sysconfig/network-scripts/ifcfg-ens33 |grep "IP"| cut -d "=" -f 2 ip a|grep "ens33"|grep "inet"|tr -d " "|cut -d "/" -f 1|cut -d "t" -f 2 ip a | awk -F " " 'NR==9{print $2}' | awk -F "/" '{print $1}' ip a |awk '$NF~/ens33/'|awk -F " " '{print $2}'|awk -F "/" '{print $1}' ip a | sed -n '/ens33$/p'|awk -F " " '{print $2}'| awk -F "/" '{print $1}' ip a | sed -n '/ens33$/p'|awk -F " +|/" '{print $3}' ip a | sed -n '/ens33$/p'|awk 'BEGIN{FS=" +|/"}{print $3}'
[root@localhost bash]# bash ip_grep.sh 192.168.160.99 192.168.160.99 192.168.160.99 192.168.160.99 192.168.160.99 192.168.160.99 192.168.160.99
[root@ken ~]# cat ken.txt http://www.qq.com/ken http://www.qq.com/ken http://www.qq.com/ken http://www.qq.com/ken http://www.qq.com/ken http://www.qq.com/ken http://www.qq.com/ken http://www.sina.com/ken http://www.sina.com/ken http://www.sina.com/ken http://www.sina.com/ken http://www.sina.com/ken http://www.sina.com/ken http://www.sina.com/ken http://www.sina.com/ken http://www.sina.com/ken http://www.sina.com/ken http://www.sina.com/ken http://www.sina.com/ken http://www.sina.com/ken http://www.taobao.com/ken http://www.taobao.com/ken http://www.taobao.com/ken http://www.taobao.com/ken http://www.taobao.com/ken http://www.taobao.com/ken http://www.taobao.com/ken http://www.taobao.com/ken http://www.taobao.com/ken http://www.taobao.com/ken http://www.taobao.com/ken http://www.taobao.com/ken http://www.taobao.com/ken
... ...
[root@sgy bash]# cat ken.txt | awk -F "//" '{print $2}' | sort | uniq -c
34 www.baidu.com
14 www.qq.com
23 www.sina.com
19 www.taobao.com
[root@sgy bash]# cat ken.txt | awk 'BEGIN{FS="//"}{h[$2]++}END{ for (i in h) print h[i],i }'| sort -rn
34 www.baidu.com
23 www.sina.com
19 www.taobao.com
14 www.qq.com
關鍵點:
一、能夠將腳本中重複出現的代碼寫成函數,屢次調用
#!/bin/bash #********************************自制簡單計算器***************************** #*******只適用於整數運算,浮點數與複數 不可計算***************************** func() { echo "${num1}${sign}${num2}=$((${num1}${sign}${num2}))" } i=1 while [ "$i" != 0 ] do read -p "請輸入一個整數:" num1 #輸入一個整數,能夠是8進制、16進制 read -p "請輸入運算符號(+、-、*、/、%、**):" sign #輸入運算符,只可進行6種 read -p "請輸入另外一個整數:" num2 #輸入另外一個整數,能夠是8進制、16進制 if [ -n "$num1" -a -n "$num2" -a -n "$sign" ];then #判斷是否已輸入 if [ "$sign" == "+" -o "$sign" == "-" -o "$sign" == "*" -o "$sign" == "**" ];then #判斷+、-、*、**運算符號 func #echo "${num1}${sign}${num2}=$((${num1}${sign}${num2}))" #進行運算,返回值默爲10進制 elif [ "$sign" == "%" -o "$sign" == "/" -a "$num2" != 0 ];then #判斷/、%運算符,並判斷除數是否爲0 func #echo "${num1}${sign}${num2}=$((${num1}${sign}${num2}))" #進行10進制運算 else echo "該運算方式沒法執行,請從新輸入~" #提示並不是上述6種運算方式 fi fi read -p "是否繼續使用計算器?(輸入其餘繼續,輸入0結束)" i #是否退出循環 done