〖Linux〗-- awk、賦值變量、if


【 awk、賦值變量、if】

awk 常用於處理格式非常明顯的文件

awk -F: '{print $1}' /etc/passwd  含義:取冒號分隔符的第一段內容

$0 指取所有!

NF 指有幾段內容

$NF 取最后一段內容

NR 指代行號

用 NR做 行定位  awk -F: 'NR==1{print $1,NR}'  test

小於等於3行的內容 awk -F: 'NR<=3{print $1,NR}'  test

3-5行的內容awk -F: 'NR>=3 && NR<=5{print $1,"---------",NR}'  test

小於等於2行,大於等於7行的內容: awk -F: 'NR>=7 || NR<=2{print $1,"---------",NR}'  test

nologin結尾的用戶名打印出來:awk -F: '/nologin$/{print $1}'  test(正則定指,指定文件和打印指定位置)                                   

用戶名r開頭t結尾,中間任意字符,打印UID,awk -F: '$1~/^r.*t/{print NR ,$3}' test

('$1~/^r.*t/用戶名來匹配正則表達式)

只打印指定文件的內容  awk -F: '$1==“root”{print NR ,$1,$3}' test

打印UID大於等於7的用戶名  awk -F: '$3>=7{print NR ,$1}' test

 

自定義一個變量,然后用awk去打印  用到 -v

count =7

awk -v x=$count -F: '$3>=x{print NR,$1,$3}' test

 

其他變量補充

1、

awk 不指定內容,以空格或是多個空格作為分隔符

查看IP地址!

ifconfig |awk 'NR==2{print $2}'   取IP地址

可以定義 ip_addr= 'ifconfig |awk 'NR==2{print $2}'   echo $ip_addr  打印結果

 

2、打印處理重復內容  先把重復的行放在一起,然后去重即可。

sort 排序

uniq 去重  -c 查看去了多少行

cat a.txt | sort |uniq -c

 

3、輕量級的操作 cut

cat test |cut -d: -f1,3簡單的處理文件

 

4、du -sh /boot/ 查看文件大小

 

5、find 命令 (找文件)

find / -type f 查找根下的普通文件

find / -name “*.txt”查找文件名為什么的文件

find / -size +30M 大於30M的文件

find / -size +10M size -30M 找出大於10M小於30M的文件

find / -size +2M -type f -name \*.txt 找出根下大於2M的名字中后綴為txt的普通文件。

 

6、查找某個目錄下,包含某個內容文件的文件名全部找出,並打印出來

grep -rl 'root' /test  (grep -r 過濾的是目錄)

 

改主機名腳本

vim a.sh

read -p 'please input your hostname:' name

hostnamectl set-hostname $name

保存退出

給執行權限,chmod -R +x a.sh

執行:./a.sh

 

shell

變量

1、命名規則:以字母開頭,剩下的部分可以是:字母,數字,下划線。

規范1.以字母開頭
        2.使用中划線或者下划線做單詞的連接
     3.同類型的用數字區分
     4.對於文件最好加上拓展名

     5.用戶能一眼看出要做什么

2、系統變量

set:查看所有變量

env:查看系統變量

3、變量賦值

x=1; 變量賦值

echo $1輸出

unset x 刪除變量

4、常用系統變量

PATH 環境變量
PWD 當前路徑
LANG
HOME
HISTSIZE  歷史命令,最多1000行
PS1 存放當前用戶,用於改用戶名 PS1=****
IFS

5、全局變量和局部變量

  全局變量指所有的用戶都通用。

  局部變量指僅僅當前用戶可用。

     export 用於linux中定義全局變量,任何位置都有效

    鏈接:

變量邊界問題:用{}來定義變量的邊界,括號內是一個整體。

例子:money =10   echo $money ----->10   echo $money0000 沒法輸出,加上{}即可。

echo ${money}0000   ----->100000

 

 

計算內存使用率

 free 查看內存

mem_total='free | awk 'NR==2{print $2}''    總內存

mem_use= 'free | awk 'NR==3{print $3}''     使用內存

echo $mem_use   查看結果

浮點運算  echo 'scale=2; $mem_use/$mem_total' | bc -l |cut -d. -f2

mem_per=' echo "scale=2; $mem_use/$mem_total" | bc -l |cut -d. -f2'

echo ${mem_per}%  百分號的使用率

 

運算符  注意:用$取值!!!

 

1、算術運算符 +  -  *  /  %

2、關系操作   <  >  <=  >=  ==  !=(不等於)  &&(與)  ||(或)      

用兩個小括號,做關系運算(())。  test命令,也可以做關系運算!

中括號[]的語法結構和test一樣,用中括號的話,與test連用。整型!

 命令下: -gt 大於 -lt 小於 -ge大於等於  -le小於等於  -eq 等於  -ne 不等於

     -a 同時成功   -o 僅有一個成功

 

賦值運算符

 =  +=  *=  /=(除等於)  %=(取余等於) 

x=1  x=$[$x+1]  echo $x=2  ---------> x=1  ((x+=1)) echo $x  2

自增1或是自減1 ((i++)) ((i--))

 

shell中的所有計算器

$[]  (())  $(())

$$ 進程PID

$# 總共有多少參數

$? 上一個命令是否正確運行

測試命令:test[] [[]] (())

1、測試文件狀態

-d 目錄
-s 文件長度 > 0、非空
-f 正規文件
-w 可寫

-r 可讀

-x 可執行

-L 符號連接

-u 文件有 suid 位設置

2、字符串測試

= 兩個字符串相等

!= 兩個字符串不相等

-z 空串

-n 非空串

3、測試數值

-eq 等於

-ne 不等於

-gt 大於

-lt 小於

-ge 大於等於

-le 小於等於

4、擴展測試符號

  比較數字,使用(( ))
  其他測試使用 [[ ]]
  包含數字比較的混合測試,使用[[ expr1 && expr2 ]] (( expr1 || expr2 ))

兩個文件的比較
 FILE1 -ef FILE2
 測試兩個文件是否是相同的inode
 有時為了找到同一個INODE號的文件 更傾向於使用 find 命令的 -inum 或 --samefile

FILE1 -nt FILE2
FILE1 is newer (modification date) than FILE2

FILE1 -ot FILE2
FILE1 is older than FILE2

 

 

shell 流程控制

創建文件.sh結尾。vim *.sh 編寫shell 以什么開始,以什么反着寫結束。

給文件執行權限 chmod +x *.sh

./*.sh 執行。驗證結果

用戶輸入 :read -p "please input:" var

睡多少秒(延遲)sleep 0.5 延遲0.5秒

輸出用$var

 

var='/etc/passwd'

if [ -f $var ]

    then

        echo "$"

  命名上不要帶系統進程名!容易產生新的進程,倒是執行錯誤。

 

$1 空格分離的第一個參數

$2空格分離的第二個參數

$3空格分離的第三個參數

$4空格分離的第四個參數

$$ 進程的PID  

$* 腳本文件后所有參數

$@ 腳本文件后所有參數

$#  總共有多少個參數

$? 上一條命令是否執行成功

 

 

 

應用舉例

重啟nginx 服務

#!/bin/bash

ps aux | grep nginx |grep -v 'grep'  #查看進程

if [ $? -ne 0 ]   #判斷 是否開啟

    then

        systemctl start nginx

fi

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM