Shell腳本基礎 day1(20191011)

什麼是腳本:

  一個可以執行文件,可以實現某種功能

 人:創建用戶tom     計算機:useradd tom

規範Shell腳本的一般組成

     • #! 環境聲明,聲明以下所有的代碼有誰進行翻譯
     • # 註釋文本
    • 可執行代碼

[root@server0 ~]# vim /root/hello.sh
#!/bin/bash
echo hello world
cat /etc/redhat-release
uname -r
hostname
ifconfig | head -2

[root@server0 ~]# /root/hello.sh

重定向輸出

 >:只收集前面命令的正確信息
 2>:只收集前面命令的錯誤信息
 &>:正確與錯誤都收集

[root@server0 ~]# echo 123 > /opt/1.txt
[root@server0 ~]# cat /opt/1.txt
[root@server0 ~]# cat /opt/1.txt /a

[root@server0 ~]# cat /opt/1.txt /a > /mnt/b.txt
[root@server0 ~]# cat /mnt/b.txt

[root@server0 ~]# cat /opt/1.txt /a 2> /mnt/b.txt
[root@server0 ~]# cat /mnt/b.txt

[root@server0 ~]# cat /opt/1.txt /a &> /mnt/b.txt
[root@server0 ~]# cat /mnt/b.txt

爲了適應多變的需求與多變環境,所以使用變量         

使用變量:會變化的量    類似於容器   以不變的名稱,存儲可以變化的值

 變量名=存儲的值

降低腳本運行難度,產生交互,獲取到用戶輸入的內容

 read -p  '屏幕輸出信息'

         1.產生交互
         2.記錄用戶在鍵盤上所有的輸入
         3.將用戶在鍵盤上所有的輸入,賦值給一個變量儲存

• 設置變量時的注意事項

   – 若指定的變量名已存在,相當於爲此變量重新賦值
    – 等號兩邊不要有空格
  – 變量名只能由字母/數字/下劃線組成,區分大小寫
   – 變量名不能以數字開頭,不要使用關鍵字和特殊字符

查看/引用變量

   • 基本格式
   – 引用變量值:$變量名
   – 查看變量值:echo $變量名、echo ${變量名}

[root@server0 ~]# a=rhel
[root@server0 ~]# echo $a

[root@server0 ~]# echo $a7

[root@server0 ~]# echo ${a}7

[root@server0 ~]# a=CentOS

[root@server0 ~]# echo ${a}7

    補充:
       單引號 '' :  取消所有特殊字符的意義

[root@server0 ~]# echo ''

[root@server0 ~]# echo '* ? | '

  • ? |
    [root@server0 ~]# a=10
    [root@server0 ~]# echo $a
    10
    [root@server0 ~]# echo '$a'
    $a
    [root@server0 ~]#

    變量的種類

    環境變量: 變量名一般都大寫,用來設置用戶/系統環境
    由系統定義完成,並且賦值完成

    常見的環境變量: 
          USER=存放當前系統登陸的用戶名

[root@server0 ~]# echo $USER
root
[root@server0 ~]# su - dc
[dc@server0 ~]$ echo $USER
dc
[dc@server0 ~]$ exit
logout
[root@server0 ~]# su - student
[student@server0 ~]$ echo $USER
student
[student@server0 ~]$ exit
logout
[root@server0 ~]#

PATH=提供命令程序搜尋的路徑

[root@server0 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

[root@server0 ~]# vim /opt/hello.sh
echo I Love Dc
[root@server0 ~]# chmod +x /opt/hello.sh
[root@server0 ~]# /opt/hello.sh
I Love Dc
[root@server0 ~]# hello.sh
bash: hello.sh: 未找到命令...

[root@server0 /]# cp /opt/hello.sh /usr/bin/
[root@server0 /]# hello.sh

    位置變量:非交互式傳遞命令行參數

       • 在執行腳本時提供的命令行參數
     – 表示爲 $n,n爲序號
       – $1、$2、.. .. ${10}、${11}、.. ..

預定義變量

    • 用來保存腳本程序的執行信息
    – 直接使用這些變量
    – 不能直接爲這些變量賦值

$# 已加載的位置變量的個數,專門用於判斷用戶是否輸入命令行參數
$? 程序退出後的狀態值,0表示正常,其他值異常

[root@server0 ~]# vim /root/1.sh
#!/bin/bash
echo $1
echo $2
echo $3
echo $#
[root@server0 ~]# /root/1.sh haha xixi hehe lele

[root@server0 ~]# vim /root/3.sh
#!/bin/bash
echo 您一共輸入了$#個參數
[root@server0 ~]# chmod +x /root/3.sh
[root@server0 ~]# /root/3.sh
[root@server0 ~]# /root/3.sh hehe lele

條件測試及選擇

   條件測試
      – [   測試表達式   ]      #每一部分之間都要有空格

  常用的測試選項
   • 檢查文件狀態
       -e:數據存在才爲真
      -d:數據存在,並且必須爲目錄才爲真
       -f:數據存在,並且必須爲文件才爲真

[root@server0 ~]# [ -f /etc/passwd ]
[root@server0 ~]# echo $?
0
[root@server0 ~]# [ -d /etc/passwd ]
[root@server0 ~]# echo $?
1
[root@server0 ~]# [ -d /etc ]
[root@server0 ~]# echo $?
0
[root@server0 ~]# [ -e /abc ]
[root@server0 ~]# echo $?
1

• 比較整數大小

         -gt:大於
        -ge:大於或等於
-eq:等於
-ne:不等於
-lt:小於
-le:小於或等於

[root@server0 ~]# [ 1 -eq 1 ]
[root@server0 ~]# echo $?
0
[root@server0 ~]# [ 2 -ge 1 ]
[root@server0 ~]# echo $?
0
[root@server0 ~]# [ 2 -ge 2 ]
[root@server0 ~]# echo $?
0
[root@server0 ~]# [ 2 -gt 2 ]
[root@server0 ~]# echo $?
1

• 字符串比對

        ==:兩個字符串一致爲真                           
    !=:兩個字符串不一致爲真

[root@server0 ~]# [ student == haha ]
[root@server0 ~]# echo $?
1
[root@server0 ~]# [ root == $USER ]
[root@server0 ~]# echo $?
0
[root@server0 ~]# [ student != haha ]
[root@server0 ~]# echo $?
0
[root@server0 ~]#

if選擇結構

if雙分支處理

if [條件測試];then
  命令序列xx
else
  命令序列yy
fi

if多分支處理

if [條件測試1];then
   命令序列xx
elif [條件測試2];then
   命令序列yy
elif [條件測試3];then
   命令序列hh

else
   命令序列zz
fi

for循環結構,解決重複性的操作

   • 遍歷/列表式循環
   – 根據變量的不同取值,重複執行xx處理
for 變量名   in   值列表
do
    反覆執行的代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章