linux中的shell腳本編程(初篇)


shell 腳本中的基本知識
shell 也是操作系統中的一個軟件它包在 linux 內核的外面,為用戶和內核之間的交互提供
了一個接口
系統中的命令用 shell 去解釋shell 接收系統回應的輸出並顯示其到屏幕中
bash = GNU Bourne-Again Shell
shell 腳本
腳本是一種解釋型語言
用 shell 腳本保存執行動作
用腳本判定命令的執行條件
用腳本來實現動作的批量執行
如何創建新 shell 腳本
vim script.sh 用 vim 編寫腳本
#!/bin/bash 腳本使用的解釋器,通常用幻數 “#!” 指定
AUTHOR 腳本作者
DATE 腳本創作時間
MAIL 腳本作者聯系方式
VERSION 腳本的版本
**腳本編寫以.sh結尾
1.自動編輯腳本的說明信息
vim /etc/vimrc ###寫進最后面**

寫入:"map <F4> ms:call WESTOS()<cr>'s ###按F4可以填充進去,但現在被注釋了,最前面的雙引號,標注釋 autocmd BufNewFile *.sh exec ":call WESTOS()" ###所有新建的以.sh結尾的文件都會自動填充 func WESTOS () call append(0,"###############################")
        call append(1,"# Author: xbw".(" #"))   ###表示建立者
        call append(2,"# Version: ".(" #"))   ###腳本的版本信息
        call append(3,"# Mail: ".(" #"))   ###建立者郵箱
        call append(4,"# Date: ".strftime("%Y-%m-%d").(" #"))  ###建立時間
        call append(5,"# Description: ".(" #"))  ###腳本描述
        call append(6,"# ".(" #"))
        call append(7,"###############################")
        call append(8,"")
        call append(9,"#!/bin/bash")
endfunc
其中call,表示調用、

這里寫圖片描述

效果圖

這里寫圖片描述

2.diff比較和patch打補丁

diff 命令是用來比較兩個文件或目錄的不同

vim westos  
寫入:hello world
    westos
vim westos1
寫入:hello world
    xbw
diff westos westos1   ###比較這兩個文件 

這里寫圖片描述

diff -u westos westos1 ###-u,以合並的方式來顯示文件內容的不同
diff -u westos westos1 > westos.path  ###把比較結果重定向到 westos.path
ls 
cat westos.path    ###查看此文件

這里寫圖片描述
這里寫圖片描述

PATCH:用於文件不同文件打布丁

yum install patch -y
patch westos westos.path  ####不會保留原文件
ls
cat westos
cat westos1

這里寫圖片描述

patch -b westos westos.path  ###-b,加上后會保留原文件內容到westos.orig
cat westos
cat westos1
cat westos.orig

這里寫圖片描述

2.比較目錄
mkdir linux
mkdir unix
ls
touch linux/file
diff -r linux unix

這里寫圖片描述

3.cut 命令多用與字符截取

cut -d
指定分隔符
cut -f 1,7|1-7 指定截取的列(1,7表示1列和7列、1-7表示17列)
cut -c 1,4|1-4 指定截取的字符位置
cut -d : -f 1 passwd

這里寫圖片描述

cut -d : -f 1-3 passwd

這里寫圖片描述

cut -d : -f 1,3 passwd

這里寫圖片描述

cut -d : -f 3- passwd

這里寫圖片描述

cut -c 1,3 passwd

這里寫圖片描述

1.寫一個腳本,執行后顯示本機ip,腳本名為ip_show.sh
vim ip_show.sh
sh ip_show.sh   ###查看結果

以下兩種寫法都可以實現
這里寫圖片描述
這里寫圖片描述
這里寫圖片描述

2.寫一個腳本,ping主機,主機開着就顯示is up,沒有或關着就顯示is  down
vim check_ip.sh
sh check_ip.sh 172.25.254.111  ###驗證結果

這里寫圖片描述

4.排序sort

vim xbw
sort -n xbw   ##純數字排序
sort -rn xbw   ##倒序
sort -u xbw   ##去掉重復數字
sort -o    ###輸出到指定文件中
sort -t    ###指定分隔符
sort -k    ###指定要排序的列
sort -t : -k 2 -rn xbw  ###將xbw中冒號分割符第2列排倒序

這里寫圖片描述

sort -t : -k 1 -n xbw   ###將xbw中冒號分割符第1列排序

這里寫圖片描述

sort -t : -k 1 -n xbw -o sort   ###將排序結果放入sort文件中
cat sort

這里寫圖片描述

sort -n xbw | uniq -c   ###每行顯示一次並統計重復次數

這里寫圖片描述

sort -n xbw | uniq -d   ###顯示重復的行

這里寫圖片描述

sort -n xbw | uniq -u   ###顯示唯一的行

這里寫圖片描述

1.寫一個腳本,找出/mnt里最大的文件
vim find_big.sh
sh find_big.sh
test 命令

下圖中這兩種寫法都可以實現
這里寫圖片描述
這里寫圖片描述
這里寫圖片描述

test 命令

test 命令和 [] 等同
test "$A" == "$B" 等同 [ "$A" == "$B" ]
[ "$A" = "$B" ]    ###等於
[ "$A" != "$B" ]   ###不等於
[ "$A" -eq "$B" ]   ###等於
[ "$A" -ne "$B" ]   ###不等於
[ "$A" -le "$B" ]   ###小於等於
[ "$A" -lt "$B" ]   ###小於

["$A" -ge "$B" ]    ###大於等於
["$A" -gt "$B" ]    ###大於
["$A" -ne "$B" -a "$A" -gt "$B" ]   ###既滿足不等於也滿足大於(與的關系)
["$A" -ne "$B" -o "$A" -gt "$B" ]   ###滿足等於或大於(或的關系)
[-z "$A" ]    ###檢測是否為空
[-n "$A" ]    ###檢測是否不為空
&&  ###表示結果為真
||  ###表示結果為假

這里寫圖片描述

1.寫一個腳本,判斷主機是否開啟,若沒有寫主機ip,則提示加上主機ip
vim check_ip.sh
sh check_ip.sh    ###給提示加上ip
sh check_ip.sh 172.25.254.111  ###顯示up
sh check_ip.sh 172.25.254.333  ###顯示down

這里寫圖片描述
這里寫圖片描述

2.寫一個腳本,判斷一個數在010之間,若沒寫數字,提示給個數字
vim num_check.sh
sh num_check.sh   ##提示給數字
sh num_check.sh 8  ###顯示結果正確
sh num_check.sh 20  ###顯示結果錯誤

這里寫圖片描述

["file1" -ef "file2" ]    ###判斷兩個文件是否節點一致,是否為硬鏈接
touch file
ln /mnt/file /mnt/file1  ###作鏈接
ls -li file*
[ "/mnt/file" -ef "/mnt/file1" ] && echo yes || echo  no
[ "/mnt/file" -ef "/etc/passwd" ] && echo yes || echo no

這里寫圖片描述

["file1" -nt "file2" ]    ###判斷file1是否比file2新建立
["file1" -ot "file2" ]    ###判斷file1是否比file2遲建立
[ "/mnt/file" -ot "/mnt/file2" ] && echo yes || echo no

這里寫圖片描述

[-e "file" ]   ###測試文件是否存在
[-f "file" ]   ###測試文件是否為普通文件
[-L "file" ]   ###測試文件是否為軟鏈接 
[-S "file" ]   ###測試文件是否為套接字
[-b "file" ]   ###測試文件是否為塊設備
[-d "file" ]   ###測試文件是否為目錄
[-c "file" ]  ###測試文件是否為字符設備
1.vim file.sh   ####為做實驗先寫一個腳本進行驗證
寫入:
#!/bin/bash
[ "$1" "/mnt/file" ] && echo yes || echo no
touch file
sh file.sh -e
sh file.sh -f

這里寫圖片描述

ln -s /mnt/file
 ll
sh file.sh -L

這里寫圖片描述

rm -fr file
yum install mariadb-server.x86_64 -y
ls
systemctl start mariadb
rsync -D /var/lib/mysql/mysql.sock /mnt/file
ll
sh file.sh -S

這里寫圖片描述

rm -fr file
rsync -D /dev/vdb /mnt/file
ll
sh file.sh -b

這里寫圖片描述

rsync -D /dev/pts/1 /mnt/file
ll
sh file.sh -c

這里寫圖片描述

rm -fr file
mkdir file
sh file.sh -d

這里寫圖片描述

1.寫一個腳本,查看文件是否存在,存在的話屬於什么文件類型
vim file_check.sh
sh file_check.sh 文件名  ####驗證

這里寫圖片描述
驗證普通文件和塊設備
這里寫圖片描述
驗證套接字和目錄
這里寫圖片描述
驗證軟鏈接
這里寫圖片描述

tr大小寫轉換

vim hello.sh
寫入:
#!/bin/bash
[ "$1" = "hello" ] &&{
     echo yes
}||{
     echo no
}

sh test.sh hello   ####小寫可以識別
sh test.sh HELLO   ###大寫就不會識別,會報錯

這里寫圖片描述
這里寫圖片描述

tr 'a-z' 'A-Z' < hello.sh 
tr 'A-Z' 'a-z' < hello.sh

這里寫圖片描述
這里寫圖片描述

寫入:
#!/bin/bash
WORD=$(echo $1 | tr 'A-Z' 'a-z')
[ "$WORD" = "hello" ] &&{
     echo yes
}||{
     echo no
}
此腳本就會自動將大寫轉換為可識別的小寫

這里寫圖片描述
這里寫圖片描述

1.寫一個腳本,判斷一個用戶是否存在,存在就不管,若沒有就建立並設置密碼
vim user_create.sh
sh user_create.sh user 123
sh user_create.sh xbw 234
下圖兩種寫法都可以實現腳本功能

這里寫圖片描述
這里寫圖片描述
這里寫圖片描述

-


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com