linx-shell編程——變量

1、介紹shell
1.SHELL語言是指UNIX操做系統的命令語言,同時又是該命令語言的解釋程序的簡稱。
2.Shell自己是一個用C語言編寫的程序,它是用戶使用Unix/Linux的橋樑,用戶的大部分工做都是經過Shell完成的。
3.Shell既是一種命令語言,又是一種程序設計語言。做爲命令語言,它交互式地解釋和執行用戶輸入的命令;
4.做爲程序設計語言,它定義了各類變量和參數,並提供了許多在高級語言中才具備的控制結構,包括循環和分支。
5.它雖然不是Unix/Linux系統內核的一部分,但它調用了系統核心的大部分功能來執行程序、
6.創建文件並以並行的方式協調各個程序的運行。
7.所以,對於用戶來講,shell是最重要的實用程序,
8.深刻了解和熟練掌握shell的特性極其使用方法,是用好Unix/Linux系統的關鍵。
2、shell能作什麼?算法

  1. 自動化批量系統初始化程序 (update,軟件安裝,時區設置,安全策略...)
  2. 自動化批量軟件部署程序 (LAMP,LNMP,Tomcat,LVS,Nginx)
  3. 應用管理程序 (KVM,集羣管理擴容,MySQL,DELLR720批量RAID)
  4. 日誌分析處理程序(PV, UV, 200代碼, !200代碼, top 100, grep/awk)
  5. 自動化備份恢復程序(MySQL徹底備份/增量 + Crond)
  6. 自動化管理程序(批量遠程修改密碼,軟件升級,配置更新)
  7. 自動化信息採集及監控程序(收集系統/應用狀態信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)
  8. 配合Zabbix信息採集(收集系統/應用狀態信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)
  9. 自動化擴容(增長雲主機——>業務上線)
    zabbix監控CPU 80%+|-50% Python API AWS/EC2(增長/刪除雲主機) + Shell Script(業務上線)
  10. 俄羅斯方塊,打印三角形,打印聖誕樹,打印五角星,運行小火車,坦克大戰,排序算法實現
  11. Shell能夠作任何事(一切取決於業務需求)
    3、SHELL執行方式:
    shell多種執行方式
    1準備測試腳本:linx-shell編程——變量
    (1)執行1:bash 1111.sh

    linx-shell編程——變量

(2)執行2:sh 1111.shshell

linx-shell編程——變量

(3)執行3: . 1111.sh編程

linx-shell編程——變量

(4)執行4: source 1111.sh安全

linx-shell編程——變量

(5)比較四種方式的所在位置:
區別:1和2的方式,是子shell 3和4的方式,是本shellbash

linx-shell編程——變量

(6):shell解釋器有哪些
:shell 命令就是前一階段所學習的大部分命令。 cp ls date組合到一塊兒。ide

Linux支持的shell有哪些呢?
cat /etc/shells

chsh -l工具

4、變量類型:
1.自定義變量:
特性:1. 自定義變量(示例:ping01.sh引入變量)
定義變量: 變量名=變量值 變量名必須以字母或下劃線開頭,區分大小寫 ip1=192.168.2.115
引用變量: $變量名 或 ${變量名}
查看變量: echo $變量名; "set"能夠查看全部變量(包括自定義變量和環境變量)
取消變量: unset 變量名
做用範圍: 僅在當前shell中有效
2.實例:使用變量前。麻煩
ping -c1 10.8.162.120 &>/dev/null && echo 10.8.162.120up || echo 10.8.162.120.10down學習

(1)使用後簡潔:
linx-shell編程——變量測試

(2)測試:
linx-shell編程——變量操作系統

2.變量賦值(定義變量):

(1) 顯式賦值
變量名=變量值
示例:
ip=192.168.1.251
school="BeiJing 1000phone"
today1=date +%F
today2=$(date +%F)

(2)read 從鍵盤讀入變量值:
read -p "請輸入您測試的IP地址:" ip
linx-shell編程——變量
測試:linx-shell編程——變量

(3):定義或引用變量時注意事項:
" " 弱引用 //脫去空格
linx-shell編程——變量
' ' 強引用 //脫去全部字符意思
linx-shell編程——變量
//優先執行 :命令替換 等價於 $() 反引號中的shell命令會被先執行
linx-shell編程——變量
另外一種用法: touch $(date +%F)_file2.txt
linx-shell編程——變量

2.環境變量:環境變量
定義環境變量: 方法一 export back_dir2=/home/backup
方法二 export back_dir1 將自定義變量轉換成環境變量
引用環境變量: $變量名 或 ${變量名}
查看環境變量: echo $變量名 env 例如env |grep back_dir2
取消環境變量: unset 變量名
變量做用範圍: 在當前shell和子shell有效 !!!!!!!!!!!!!!!!!!!!!!!

使變量開機、登錄生效,將變量放到~/.bash_profile

  1. 位置變量和預約義變量:

    (1)語法:預先定義過的變量
    $0 腳本名
    $* 全部的參數
    $@ 全部的參數
    $# 參數的個數
    $$ 當前進程的PID
    $! 上一個後臺進程的PID
    $? 上一個命令的返回值 0表示成功
    (2)實例1:
    linx-shell編程——變量
    實驗: ./ tst.sh 1 2 3 4 5 6
    linx-shell編程——變量

4.$和$@區別(資料):
shell中$
與$@的區別

關於$* 和 $@的 一點 認識 同是菜鳥一塊兒學習

$
全部的位置參數,被做爲一個單詞.
注意:"$
"必須被""引用.br/>$@
與$*同義,可是每一個參數都是一個獨立的""引用字串,這就意味着參數被完整地傳遞,
並無被解釋和擴展.這也意味着,每一個參數列表中的每一個參數都被當成一個獨立的
單詞.
注意:"$@"必須被引用.

$@ $ 只在被雙引號包起來的時候纔會有差別
雙引號括起來的狀況:
$
將全部的參數認爲是一個字段
$@以IFS(默認爲空格)來劃分字段,若是空格在「」裏面,不劃分。採用LS的腳本運行./test 1 "2 3" 4 來發現差別

沒有括起來的狀況是$@和$*同樣的,見到IFS就劃分字段。仍是採用LS的腳本運行./test 1 "2 3" 4 來發現差別

一個小例子 ,僅供參考

[Copy to clipboard] [ - ]CODE:#!/bin/bash
echo

index=1

echo "Listing args with\"\$\":"
for arg in "$
"

do
echo "Arg #$index=$arg"
let "index+=1"

done

echo "全部的參數被認爲是一個單詞"

echo

index=1

echo "Listing args with \"\$@\":"
for arg in "$@"
do
echo "Arg #$index=$arg"
let "index+=1"
done

echo "全部的參數被認爲是各個獨立的單詞"

echo

index=1

5、變量的運算

  1. 整數運算:

    (1) expr用法:方法一、
    linx-shell編程——變量
    linx-shell編程——變量

(2)方法二:$(())
linx-shell編程——變量

(3)方法三:$[]
linx-shell編程——變量

(4)方法四:let
linx-shell編程——變量

2.小數運算:

須要用到工具 bc 至關於一個計算器
yum -y install bc
(1)小數運算,用bc和不用bc的區別
直接輸入bc的用法 :
linx-shell編程——變量
(2)在shell命令上直接用bc
linx-shell編程——變量scale=2 保留小數點後面兩位bc:交互運算器

相關文章
相關標籤/搜索