shell for 0開始_Shell基礎入門
阿新 • • 發佈:2020-12-17
技術標籤:shell for 0開始shell grep 變數shell if 非shell 字串替換shell 字串轉數字shell 替換字串
Shell 實現的功能
1)手動安裝作業系統2)初始化作業系統3)安裝服務4)服務啟動systemd5)shell進行程式碼上線6)監控zabbix cacti網絡卡 Nagios監控硬體交換機路由器7)日誌分析
必備基礎
1.熟練使用vim編輯器2.熟悉ssh終端3.熟練使用linux基礎命令4.熟練使用四劍客
基礎命令參考連結
linux常用命令
Linux重要命令合集
shell 知識點
變數基礎 條件表示式 if判斷 for迴圈 while迴圈 utile迴圈 continue break exit case語句 陣列看懂別人的指令碼 掌握常見語法 重複練習要有程式設計思維找合適的教材(專案多)
Shell入門
1)什麼是Shell
Shell是一個命令直譯器,作用解釋使用者輸入的命令以及程式。
2)什麼是Shell指令碼
把命令統一在放一個檔案中進行執行,稱為Shell指令碼。
Shell指令碼包含若干個命令+IF判斷+FOR迴圈+變數+陣列等等
hello,world
[[email protected] /server/scripts ]# vim test.sh#!/bin/sh #直譯器#Authorajie #作者#print hello word #目的echo "hello,word!"
如何執行指令碼
sh test.sh chmod +x test.sh./test.sh/server/scritps/test.sh source test.sh . test.sh cat test.sh|bashbash < test.sh
變數
變數的生存週期
永久的 需要修改環境變數配置檔案 變數永久生效 /etc/profile臨時的 直接使用export宣告變數即可,關閉shell則變數失效 不加export 則只對當前的shell生效加export 則對當前開啟視窗所有的shell生效
環境變數配置檔案生效的順序
/etc/profile .bash_profile .bashrc /etc/bashrc
自定義環境變數
變數名=變數值獲取值$變數名
[[email protected] ~ ]# name=ajie[[email protected] ~ ]# echo $nameajie
變數值的定義
數字變數內容定義age=18 字串定義boy='I am teacher' 預設是雙引號 混合字串必須加雙引號 數字 字串 變數
單引號和雙引號的區別
單引號: 所見即所得 吃什麼吐什麼 定義的什麼值輸出或者呼叫的就是什麼值 不會解析變數 雙引號:可以解析變數
命令的定義方式
test=`pwd`test=$(pwd)
Shell特殊位置重要變數
配合echo使用
$0 獲取當前Shell指令碼的檔名 如果指令碼全路徑執行則顯示全路徑 basename 只獲取指令碼名稱$n 獲取當前指令碼的第n個引數,n為0則是指令碼名稱,從$1開始代表指令碼的第一個引數 $9以後需要加{} ${10}$# 獲取shell指令碼所有傳參的總個數$* 獲取shell指令碼所有傳參的引數,如果不加雙引號則和[email protected]相同,在迴圈語句中如果加上雙引號,則表示將所有的引數視為單個字串[email protected] 獲取shell指令碼所有傳參的引數,如果不加雙引號則和$*相同,在迴圈語句中如果加上雙引號,則表示將所有的引數視為獨立字串$? 獲取執行上一條命令的執行狀態結果,返回值0為成功 非0失敗$$ 獲取當前指令碼的PID$! 獲取上一個後臺工作指令碼進行的PID$_ 獲取指令碼最後的一個引數 類似於ESC .
指令碼的傳參
直接傳參
[[email protected] /server/scripts ]# cat test.sh #!/bin/bash#Author:ajie#FileName:test.shping -c1 -W1 $1 &>/dev/null[ $? -eq 0 ] && echo "ping is ok" || echo "ping is error"[[email protected] /server/scripts ]# sh test.sh baidu.comping is ok[[email protected] /server/scripts ]# sh test.sh baiduuuuuuuuu.comping is error
變數賦值
[[email protected] /server/scripts ]# cat test.sh #!/bin/bash#Author:ajie#FileName:test.shurl=$1ping -c1 -W1 $url &>/dev/null[ $? -eq 0 ] && echo "ping is ok" || echo "ping is error"
read讀入
[[email protected] /server/scripts ]# cat test.sh #!/bin/bash#Author:ajie#FileName:test.shread -p "check your url: " urlping -c1 -W1 $url &>/dev/null[ $? -eq 0 ] && echo "ping is ok" || echo "ping is error"[[email protected] /server/scripts ]# sh test.sh check your url: lvxinjie.cnping is ok
變數的子串
子串切片
name="I am shuaiguo"
取出am 三種方式取值
echo $name|awk '{print $2}'am echo $name|cut -c 3-4am echo ${name:2:2}am
如何統計變數內的長度
echo $name|wc -L13 echo ${#name}13 echo $name|awk '{print length}'13 expr length "$name"13
變數的刪除和替換
url=www.sina.com.cn 方法1sed -r 's#www.(.*)#\1#'方法2echo www.sina.com.cn|grep 's.*$' -o方法3echo $url|sed 's#www.##g'方法4echo ${url:4}方法5 切碎組合echo $url|cut -d "." -f2方法6 變數刪除[[email protected] ~]# echo $urlwww.sina.com.cn[[email protected] ~]# echo ${url#*.}sina.com.cn[[email protected] ~]# echo ${url#*.*.}com.cn[[email protected] ~]# echo ${url#*.*.*.}cn [[email protected] ~]# echo ${url}www.sina.com.cn[[email protected] ~]# echo ${url#*s}ina.com.cn[[email protected] ~]# echo ${url} www.sina.com.cn[[email protected] ~]# echo ${url#*c}om.cn[[email protected] ~]# echo ${url##*c}n [[email protected] ~]# echo ${url}www.sina.com.cn[[email protected] ~]# echo ${url%.*}www.sina.com[[email protected] ~]# echo ${url%.*.*}www.sina[[email protected] ~]# echo ${url%%.*} www [[email protected] ~]# echo $urlwww.sina.com.cn[[email protected] ~]# echo $url|sed 's#sina#baidu#g'www.baidu.com.cn[[email protected] ~]# echo ${url/sina/baidu}www.baidu.com.cn[[email protected] ~]# echo ${url}www.sina.com.cn[[email protected] ~]# echo ${url/w/a}aww.sina.com.cn[[email protected] ~]# echo ${url//w/a}aaa.sina.com.cn
小結:
變數從前往後刪除 # 貪婪匹配 ##變數從後往前刪除 % 貪婪匹配 %%變數內容替換 // 貪婪匹配 ///