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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

第11章:Shell编程

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

一、正則表達式:


例子:








二、字符截取命令

1、cut 選項 文件名 cut進行列提取-f 提取第幾列 -d 按照指定的分隔符分隔列

注意:上面的studebt.txt中的間隔不是“空格”,而是制表符“Tab”。 cut -f 2,4 studebt.txt cut -d ":" -f 2,3 /etc/passwd 案例:假設我想刪除當前Linux系統下的除了root外的所有可以登錄的普通用戶,(所有可以登錄的普通用戶/bin/bash):(1)先提取出來所有普通用戶的用戶名 cat /etc/passwd | grep "/bin/bash" | grep -v root | cut -d ":" -f 12)再把提取出來的用戶的用戶名賦值給一個變量,用循環的方式一個一個刪除。注:cut命令只能識別制表符Tab,逗號,冒號等作為間隔符的列,不能識別空格作為間隔符的列,--->因此cut符具有局限性,從而引出awk。2printf 格式化輸出命令 printf "輸出類型輸出格式" 輸出內容%ns 字符串%ni 整數%m.nf 浮點數下面介紹幾個案例:



3、awk 列截取 可以進行截取字符段、函數、判斷、流程控制等強大的功能。



上圖,注: $2表示第2列;\r回車 ; \t Tab ; \n換行

介紹awk中的幾個常用命令: (1)BEGIN:主要用于處理FS默認的分隔符cat /etc/passwd|grep "/bin/bash"|awk 'BEGIN{FS=":"}{printf $1 "\t" $3 "\n"}'2)FS內置變量:手工定義分隔符,默認情況下awk的分隔符是Tab、空格。cat student.txt|grep -v name|awk '$6>80 {printf $2 "\n"}'3)ENDawk 'END {printf "The End\n"} printf $2 "\t" $6 "\n"' student.txt 4、sed 流編輯器 (以行為單位) 作用:對文件中的數據進行選取、增刪改。 sed 選項 '動作' 選項:-n 只打印查詢出的內容 -e 允許多個條件執行,多個條件之間用“分號”或“回車” -i 修改了文件本身內容,不加-i并沒有修改文件的內容 動作:注意,動作必須用單引號括起來!a 追加i 行之前插入p 打印輸出d 刪除c 替換行號s/舊字符串/新字符串/g 替換字符串

三、字符處理命令

1.排序命令sortsort 選項 文件名 選項:-f 忽略大小寫 -n 以數值排序,默認以字符串 -r 反向排序 -t 指定分隔符,默認以Tab為分隔符 2.wc 選項 文件名 統計命令 選項:-l 行數 -w 單詞數 -m 字符數

條件判斷






兩種判斷格式: 法1:test -e /root/install.log 法2:[ -e /root/install.log ] 注意:[]與中間的字符串必須有空格 注解:但是每次判斷完文件是否存在,我們還需要用echo $?查看文件是否存在,比較麻煩--->因此我們可以用“邏輯運算符”把兩句話聯系起來,見下: [ -e /root/install.log ]&&echo "yes" || echo "no" 再例:[-d /root ]&&echo "yes" || echo "no" 判斷/root是否是一個目錄;如果是目錄,輸出yes,否則輸出no

四、流程控制語句
(一)控制語句-if語句

1、單分支if條件語句if [條件判斷式] ; then //需要;,和then寫在一行程序fi 或者if [條件判斷式] //不需要;,不和then寫在一行then程序fi 2、雙分支if條件語句if [條件判斷式] //不需要;,不和then寫在一行then條件成立時,執行的程序else條件不成立時,執行的另一個程序fi 3、多分支if條件語句if [ 條件判斷式1 ]then當條件判斷式1成立時,執行程序1elseif [條件判斷式2]then當條件判斷式2成立時,執行程序2...省略更多條件...else當所有條件都不成立時,執行此程序fi 注意: (1if語句使用fi結尾,和一般語言使用大括號結尾不同 (2)[條件判斷式]就是使用test命令判斷,所以中括號和條件判斷式之間必須有空格 (3then后面跟符合條件之后執行的程序,可以放在[]之后,用“;”分割。也可以換行寫入,就不需要“;”了。例子1:判斷分區使用率#!bin/bash //標注:這個是shell腳本rate=$(df -h|grep "/dev/sda5"|awk '{printf $5}'|cut -d "%d" -f1) #統計根分區使用率,并把根分區使用率作為變量值賦給rateif [ $rate -ge 80 ]thenecho "Warning! /dev/sda3 is full!"fi 例子2:備份/var/lib/mysql數據庫到/tmp/dbbak目錄下#!bin/bashntpdate asia.pool.ntp.org &>/dev/null #同步系統時間date=$(date +%y%m%d) #把當前系統時間按照年月日格式賦值給變量datesize=$(du -sh /var/lib/mysql) #統計mysql數據庫的大小,并把大小賦予size變量if [ -d /tmp/dbbak ] 如果/tmp/dbbak目錄存在thenecho "Date:$date">/tmp/dbbak/dbinfo.txtecho "Date size:$size">>//tmp/dbbak/dbinfo.txtcd /tmp/dbbaktar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/nullrm -rf /tmp/dbbak/dbinfo.txtelsemkdir /tmp/dbbakecho "Date:$date">/tmp/dbbak/dbinfo.txtecho "Date size:$size">>//tmp/dbbak/dbinfo.txtcd /tmp/dbbaktar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/nullrm -rf /tmp/dbbak/dbinfo.txtfi 例子3:判斷apache是否啟動 【apache非常常用的腳本】#!/bin/bashport=$(nmap -sT 192.168.1.156|grep tcp|grep http|awk '{printf $2}') #使用nmap命令掃描服務器,并截取apache服務的狀態,賦值給portif { "$port" == "open" }thenecho "$(date) http is ok!">>/tmp/autostart-acc.logelse/etc/rc.d/init.d/httpd start &>/dev/nullecho "$(date) restart http!">>/tmp/autostart-acc.log

(二)控制語句-case語句

case $變量名 in"值1")執行程序1"值2")執行程序2......*)如果以上條件不成立,執行此程序 esac

(三)流程控制-for循環

語法一:for 變量 in123do 程序done1#!/bin/bashfor time in morning noon afternoon eceningdoecho "This is $time"done2:批量解壓縮cd /lampls *.tar.gz>ls.logfor i in $(cat ls.log)dotar -zxf$i&>/dec/nulldone 語法二:for ((初始值;循環控制條件;變量變化))do程序done 例:批量添加指定數量的用戶#!/bin/bashread -p "請輸入用戶數量:" -t 30 numread -p "請輸入用戶名字:" -t 30 nameread -p "請輸入用戶密碼:" -t 30 pass if[ ! -z "$name" -a ! -z "$name" -a ! -z "$pass"]theny=$(echo $num|sed 's/^[0-9]*$//g') if [ -z "$y" ] 判斷輸入的num是否為數字thenfor((i=1;i<$num;i=i+1))do/usr/sbin/useradd $name$i&>/dev/nullecho $pass|/usr/bin/passwd -- stdin $name$i &>/dev/nulldonefifi

(四)while循環和until循環

1while [ 條件判斷式 ]do程序done 2、 until 只要條件不成立,則一直循環;當條件成立時,循環終止。 until [ 條件判斷式 ]do程序done

總結

以上是生活随笔為你收集整理的第11章:Shell编程的全部內容,希望文章能夠幫你解決所遇到的問題。

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