一:shell基礎html
概述:shell腳本與python同樣是一種解釋性語言python
應用:c++
Shell 腳本的優點在於處理偏操做系統底層的業務,例如,Linux 內部的不少應用(有的是應 用的一部分)都是使用 Shell 腳本開發的,由於有 1000 多個 Linux 系統命令爲它做支撐, 特別是 Linux 正則表達式以及三劍客 grep、awk、sed 等命令。 對於一些常見的系統腳本,使用 Shell 開發會更簡單、更快速,例如,讓軟件一鍵自動化安 裝、優化,監控報警腳本,軟件啓動腳本,日誌分析腳本等,雖然 Python 也能作到這些,但 是考慮到掌握難度、開發效率、開發習慣等因素,它們可能就不如 Shell 腳本流行以及有優點 了。對於一些常見的業務應用,使用 Shell 更符合 Linux 運維簡單、易用、高效的三大原則
二:shell 腳本web
#!/bin/bash # ————————》#!是一個約定的標記,它告訴系統這個腳本須要什麼解釋器來執# #行,即便用哪種 Shell;後面的/bin/bash就是指明瞭解釋器的具體位置。 echo "Hello World !" #這是一條語句
1 查看shell正則表達式
查看默認shellshell
二 變量vim
1 變量的聲明與調用數組
2 變量的引用注意點bash
3 將命令結果賦值給變量運維
[root@server1 ~]# log=$(cat a.txt) #命令結構賦值 [root@server1 ~]# echo $log #輸出變量 server { listen port; server_name localhost ; location / { root html; index index.html index.htm; } } server { listen port; server_name localhost ; location / { root html; index index.html index.htm; } } [root@server1 ~]# log1=$(cat text.sh) #命令結構賦值 [root@server1 ~]# echo $log1 #輸出變量 #!/bin/bash url="http://www.baidu.com" web1="百度一下你就知道 ${url}" web2='百度一下你就知道 ${url}' echo $web1 echo $web2
只讀變量:
4 變量的刪除
三 變量的做用域
1 局部變量
[root@server1 ~]# vim t1.sh [root@server1 ~]# chmod +x t1.sh [root@server1 ~]# ./t1.sh 99 [root@server1 ~]# cat t1.sh #!/bin/bash #定義函數 function func(){ a=99 } #調用函數 func #輸出函數內部變量 echo $a
2 全局變量
[root@server1 ~]# a=22 #定義一個全局變量 [root@server1 ~]# echo $a #輸出全局變量 22 [root@server1 ~]# bash # 進入shell子進程 [root@server1 ~]# echo $a #輸出變量值 [root@server1 ~]# exit #推出shell進程 exit [root@server1 ~]# export a #將a定義爲環境變量 [root@server1 ~]# bash #進入shell環境 [root@server1 ~]# echo $a #輸出變量值 22 [root@server1 ~]# exit #推出shell環境 exit
三:shell命令替換
四:shell 腳本傳遞參數
2 給函數傳遞位置參數
[root@server1 ~]# vim t4.sh [root@server1 ~]# cat t4.sh #!/bin/bash #定義函數 function func() { echo "language :$1" echo "URL:$2" } #調用函數 fun c++ http://c.biancheng.net/cplus [root@server1 ~]# chmod +x t4.sh [root@server1 ~]# ./t4.sh language :c++ URL:http://c.biancheng.net/cplus
五: shell中特殊的變量
變量 | 含義 |
---|---|
$0 | 當前腳本的文件名。 |
$n(n≥1) | 傳遞給腳本或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是 $1,第二個參數是 $2。 |
$# | 傳遞給腳本或函數的參數個數。 |
$* | 傳遞給腳本或函數的全部參數。 |
$@ | 傳遞給腳本或函數的全部參數。當被雙引號" " 包含時,$@ 與 $* 稍有不一樣,咱們將在《Shell $*和$@的區別》一節中詳細講解。 |
$? | 上個命令的退出狀態,或函數的返回值,咱們將在《Shell $?》一節中詳細講解。 |
$$ | 當前 Shell 進程 ID。對於 Shell 腳本,就是這些腳本所在的進程 ID。 |
六 shell 中字符串的操做
1 字符串的拼接(直接拼接)
[root@server1 ~]# name="good" [root@server1 ~]# name1="hello" [root@server1 ~]# echo name name1 name name1 [root@server1 ~]# echo $name $name1 good hello
2字符串的切割
[root@server1 ~]# url="www.baidu.com" [root@server1 ~]# echo ${url:2:9} w.baidu.c [root@server1 ~]# echo ${url:4:9} baidu.com [root@server1 ~]# echo ${url:4:-1} baidu.co [root@server1 ~]# echo ${url:-4:-1} www.baidu.com
七 shell中的數組
1 數組的定義
[root@server1 ~]# lst=(1 2 3 4 5 6 7) #定義數組 [root@server1 ~]# echo ${lst[1]} #查看索引對應的數組 2 [root@server1 ~]# echo ${lst[2]} 3 [root@server1 ~]# echo ${lst[3]} 4 [root@server1 ~]# echo ${lst[*]} #查看全部數組元素 1 2 3 4 5 6 7 [root@server1 ~]# echo ${lst[@]} #查看全部元素數組 1 2 3 4 5 6 7 [root@server1 ~]# lst=(1 2 3 4 5 6 7 8) [root@server1 ~]# echo ${#lst[*]} #查看數組長度 8
2 數組拼接
[root@server1 ~]# lst2=(a b c d e f) [root@server1 ~]# lst0=(${lst[*]} ${lst2[*]}) [root@server1 ~]# echo ${lst0[*]} 1 2 3 4 5 6 7 8 a b c d e f
3 刪除數組
[root@server1 ~]# unset lst0[1] [root@server1 ~]# echo ${lst0[*]} 1 3 4 5 6 7 8 a b c d e f