1. 程式人生 > >指令碼檔案的學習與編寫以及字元擷取命令的學習

指令碼檔案的學習與編寫以及字元擷取命令的學習

u盤只讀:

1 mount -o rw,remount /dev/sdb  #/dev/sdb為u盤在電腦上的名稱,可用df進行檢視    
2 umount /dev/sdb
3 df 
4 mount /dev/sdb  /mnt
5 cd /mnt
6 mv    檔案     /mnt

shell的瞭解:

shell也是作業系統中的一個軟體,它包含在linux核心的外面,為使用者和核心之間的互動提供了一個介面。
系統中的命令用shell去解釋shell接受系統迴應的輸出並顯示其到螢幕中

shell指令碼:

指令碼是一種解釋型語言,用shell指令碼儲存執行動作,用指令碼判定命令的執行條件,用指令碼來實現動作的批量執行

sh -x ip_show.sh      #檢視指令碼報錯,+表示命令,命令下邊是報錯資訊,沒有就代表命令正確
+tail -n 1
+ifconfig
+head -n 2

.sh 為指令碼檔案

1.指令碼的書寫規則和執行

cd /mnt
vim ip_show.sh    #編寫指令碼檔案

#!/bin/bash #幻數,使指令碼執行時先執行第一行的程式,必須寫,且不能寫錯
ifconfig eth0 | grep “inex ” #指令碼要執行的命令,顯示主機ip

sh ip_show.sh(/mnt/ip_show.sh)    #執行指令碼檔案,兩種方式
vim /etc/vimrc

這裡寫圖片描述
這裡寫圖片描述
效果:

vim file.sh   #快捷鍵的效果,編輯指令碼,按快捷鍵即可
vim file1.sh  #腳本里會自動出現

這裡寫圖片描述

2.diff 命令的使用(用來打補丁 )

vim westos
vim westos1 

這裡寫圖片描述

diff westos westos1  #比較兩個檔案的不同

這裡寫圖片描述

diff -u westos westos1  > westos.path   #比較兩個檔案的不同,並把不同的地方寫入補丁檔案中,  .path為補丁檔案
cat westos.path    #顯示補丁過程

這裡寫圖片描述

yum install patch -y       #下載補丁工具
patch -b westos westos.path   #儲存原檔案內容
patch westos westos.path     #對原檔案進行補丁
cat westos.orig             #把儲存的檔案內容寫入到了此檔案中
cat westos

這裡寫圖片描述

補充:比較兩個目錄的不同

mkdir linux
touch linux/file
mkdir unix
diff -r linux/ unix/  

這裡寫圖片描述

4.cut命令的使用(多用於字元擷取)

cut -d                 #指定分隔符
cut -f  1,7|1-7        #指定擷取的列,第一列和第七列|一到七列
cut -c  1,4|1-4        #指定擷取的字元位置
應用:執行指令碼檔案,使之只顯示自己的ip
cd /mnt
vim ip_show.sh

這裡寫圖片描述

sh ip_show.sh

這裡寫圖片描述

5.&& 與 || 的應用

&&      #表示與
||      #表示或
應用:編輯一個指令碼使得,如果可以ping通,就輸出 $$1 up,如果不可以ping通,就輸出 $1 down,$1表示輸入的字元
cd /mnt
vim check_ip.sh

這裡寫圖片描述

測試:
sh check_ip.sh   172.25.254.78
sh check_ip.sh 172.25.254.238

這裡寫圖片描述

6.sort命令和uniq命令的使用(通常兩個聯合使用)

sort -n   #純數字排序
sort -r   #倒序
sort -u   #去掉重複數字
sort -o   #輸出到指定檔案中
sort -t   #指定分隔符
sort -k   #指定要排序的列
uniq -u   #顯示唯一的行
uniq -d   #顯示重複的行
uniq -c   #每行顯示一次並統計重複次數
舉例:
vim westos

這裡寫圖片描述

sort -n westos 

這裡寫圖片描述

 sort -r westos 

這裡寫圖片描述

vim westos1

這裡寫圖片描述

sort -n westos1 #如果有兩列的話,按照第一列進行排序
sort -t : -k 2  westos1 #以:為分隔符,對第二列進行排序
sort -urn  westos1 #去掉重複數字進行倒序排序
sort -n westos | uniq -c #每行顯示一次並統計重複次數並排序
sort -n westos | uniq -d #顯示重複的行並進行排序
sort -n westos | uniq -u #顯示不重複的行並進行排序

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

應用:給/mnt下的檔案排序,並編寫指令碼檔案輸出最大的檔案
方法1:
ls -Sl /mnt    #排序並顯示

這裡寫圖片描述

ls -Sl /mnt/  | grep -v total   #顯示且刪除顯示的第一行

這裡寫圖片描述

ls -Sl /mnt/  | grep -v total | awk -F " " 'NR==1{print $9}'     #輸出第九列,即檔名,awk報告生成器

這裡寫圖片描述

方法2:
ls -l /mnt | grep total -v | awk -F " " '//{print $5,$9}' |   sort -nr  #排序並輸出第五列(大小)和第九列(檔名)

這裡寫圖片描述

ls -l /mnt | grep total -v | awk -F " " '//{print $5,$9}' | sort -nr |  head -n 1  #在上一個輸出的基礎上選擇輸出第一行

這裡寫圖片描述

ls -l /mnt | grep total -v | awk -F " " '//{print $5,$9}' | sort -nr | head -n 1  | cut -d " " -f 2  #剪下檔名輸出

這裡寫圖片描述

7.test命令的使用

test命令和 [] 等同
test "$1" == "s2"  等同 [ "$1" == "$2" ]
[ "$1"  = "$2" ]    #判斷$1是否等於$2
[ "$1" != "$2" ]    #判斷$1是否不等於$2
[ "$1" -eq "$2" ]   #判斷$1是否等於$2
[ "$1" -ne "$2" ]   #判斷$1是否不等於$2
[ "$1" -le "$2" ]   #判斷$1是否小於等於$2
[ "$1" -lt "$2" ]   #判斷$1是否小於$2
[ "$1" -ge "$2" ]   #判斷$1是否大於等於$2
[ "$1" -gt "$2" ]   #判斷$1是大於$2  
[ "$1" -ne "$2" -a "$1" -gt "$2" ]    #判斷$1是否不等於且大於$2
[ "$1" -ne "$2" -o "$1" -gt "$2" ]    #判斷$1是否不等於或者大於$2  
[ -z "$2" ]         #判斷$2是否為空
[ -n "$2" ]         #判斷$2是否不為空
實驗:
編輯指令碼檔案,判斷輸入數字的大小是否小於10
vim num_check.sh    #編寫指令碼檔案,執行命令更方便

這裡寫圖片描述

sh num_check.sh  1
sh num_check.sh  23
sh num_check.sh  

這裡寫圖片描述

[ "file1" -ef "file2" ]     #判斷file1是否與file2互為硬連結
[ "file1" -nt "file2" ]     #判斷file1與file2哪個出現的晚
[ "file1" -ot "file2" ]     #判斷file1與file2哪個出現的早
實驗:
touch file
ln /mnt/file /mnt/file1   #建立硬連結
ls -li /mnt               #節點是否相同,即是否互為硬連結
[ "/mnt/file" -ef  "/mnt/file1" ]&& echo yes || echo no  #判斷/mnt/file和/mnt/file1互為硬連結
[ "/mnt/file" -ef  "/etc/passwd" ]&& echo yes || echo no  #判斷/mnt/file和/etc/passwd互為硬連結

這裡寫圖片描述

[  -e "file2" ]             #判斷檔案是否存在
[  -f "file2" ]             #判斷檔案是否為普通檔案
[  -L "file2" ]             #判斷檔案是否為軟連結
[  -S "file2" ]             #判斷檔案是否為套接字
[  -b "file2" ]             #判斷檔案是否為塊裝置
[  -d "file2" ]             #判斷裝置是否為檔案
[  -c "file2" ]             #判斷是否為字元裝置
實驗2:編輯一個指令碼檔案,判斷/mnt/file的檔案型別
vim file_check.sh

這裡寫圖片描述
這裡寫圖片描述

sh file_check.sh  
sh file_check.sh   file
sh file_check.sh   /dev/vdb
sh file_check.sh   /etc/system-release

這裡寫圖片描述

8.tr(轉換) 命令的使用

vim test.sh

這裡寫圖片描述

sh test.sh  hello
sh test.sh  HELLO   #只是大小寫的區別,輸出結果就不同

這裡寫圖片描述

用tr命令解決這個問題
tr 'a-z' 'A-Z' < test.sh

這裡寫圖片描述
vim test.sh
這裡寫圖片描述
sh test.sh hello
sh test.sh HELLO
這裡寫圖片描述

寫一個指令碼:當輸入一個使用者時,當該使用者存在,則提示使用者已存在,當該使用者不存在時,則建立該使用者,並設定該使用者密碼
vim user_create.sh 

這裡寫圖片描述

sh user_create.sh  root redhat
sh user_create.sh  unix 123
id unix

這裡寫圖片描述

su - unix   #用密碼123成功登陸代表建立成功