免费在线a视频-免费在线观看a视频-免费在线观看大片影视大全-免费在线观看的视频-色播丁香-色播基地

linux實戰技能100講(筆記)第四章

:2023年08月16日 吾愛破解
分享到:

Shell腳本這是Shell腳本的語法知識。認識shell什么是shellShell 是命令解釋器,用于解釋用戶對操作系統的操作。 復制代碼 隱藏代碼cat /etc/shells //查看shell類型Linux 的 Shell ...

Shell腳本

這是Shell腳本的語法知識。

認識shell

什么是shell

Shell 是命令解釋器,用于解釋用戶對操作系統的操作。

 復制代碼 隱藏代碼cat /etc/shells //查看shell類型

Linux 的 Shell 種類眾多,常見的有:

  • Bourne Shell(/usr/bin/sh或/bin/sh)

  • Bourne Again Shell(/bin/bash)

  • C Shell(/usr/bin/csh)

  • K Shell(/usr/bin/ksh)

  • Shell for Root(/sbin/sh)

    Linux啟動過程

    BIOS - MBR - BootLoader(grub) - kernel - init或systemd - 系統初始化 - shell

    shell腳本

    UNIX 的哲學:一條命令只做一件事
    demo.sh

     復制代碼 隱藏代碼#!/bin/bash # demo 注釋cd /data/
    lspwd

    #! 是一個約定的標記(Sha-Bang),它告訴系統這個腳本需要什么解釋器來執行。

 復制代碼 隱藏代碼chmod u+rx demo.sh //賦權

//子進程執行,不會改變當前環境
bash demo.sh //可不需可執行權限
./demo.sh //必須可執行權限

//當前進程執行,會改變當前環境source ./demo.sh
. filename.sh
  • 內建命令不需要創建子進程

  • 內建命令對當前 Shell 生效

    管道與重定向

    管道

    匿名管道(管道符)| 是 Shell 編程經常用到的通信工具,將前一個命令執行的結果傳遞給后面的命令。
    例如:

 復制代碼 隱藏代碼ls -l | more
more filename
cat filename | more //分頁顯示文件內容

管道符會將兩側命令(外建命令)建兩個子進程,如果是內建命令,子進程的修改,不會傳遞到父進程。

外部命令會產生子進程,管道符同樣會產生子進程。內部命令在shell當前進程運行,不會產生子進程。

在管道符兩端放置內部命令,相當于打開了新的子shell。內部命令執行結束之后,子shell也會跟著一起結束。因此在管道符兩端放置內部命令,對當前的shell是不生效的。

重定向

一個進程默認會打開標準輸入、標準輸出、錯誤輸出三個文件描述符。
默認的標準輸入是鍵盤,默認的標準輸出是屏幕,默認的錯誤輸出是屏幕,而改變這個行為就是重定向。

  • < 輸入重定向

  • \> 輸出重定向

  • \>> 追加重定向

  • 2> 錯誤重定向

  • &> 全部重定向

  • | 管道重定向

  • &1 引用重定向

由于引用重定向“&1”的存在,會使得下面幾個命令等價:
command > file 2> file(要打開兩次file,效率較低)
command 2> file > file(要打開兩次file,效率較低)
command > file 2> &1(只打開一次file,效率較高)
command 2> file > &1(只打開一次file,效率較高)
command &> file (只打開一次file,效率最高)

變量

變量定義

變量名的命名規則

  • 字母、數字、下劃線

  • 不以數字開頭

    變量操作

    賦值

     復制代碼 隱藏代碼a=123 //等號左右側不能有空格,有空格會被認為是命令let a=10+20 //let賦值,可計算
    l=ls //將命令賦值給變量
    string="hello bash" //將字符串賦值給變量
    c=$(ls-l /etc) //將命令結果賦值給變量
    c='ls-l /etc' //將命令結果賦值給變量

    空格等特殊字符可以包含在""''

    引用

  • ${變量名} 為變量的引用

  • echo ${變量名}  查看變量值,部分情況可省略為$變量名

    作用范圍

  • 默認作用范圍為當前終端,不跨子父終端。

  • export 導出,使子進程可以訪問父進程變量

     復制代碼 隱藏代碼export demo_string
  • unset 刪除

 復制代碼 隱藏代碼unset demo_string

環境變量

環境變量:每一個終端都可以獲得的變量

  • env 查看環境變量

  • set 查看更多環境變量

 復制代碼 隱藏代碼echo $PATH //當前終端的搜索路徑echo $PS1 //當前終端的提示信息echo $? //查看上一條命令是否正確執行echo $! //echo $$ //顯示當前進程的pidecho $0 //顯示當前進程名稱
  • 位置參數
    $1$2 $3 ....${10}

${2-_}  //如果第二個參數無值,則結果為_

  • 配置文件

    • /etc下保存全部用戶配置

    • ~/下保存對應用戶配置

    • login用戶使用四個配置,no-login使用bashrc

      /etc/profile
      /etc/bashrc
      ~/.bashrc
      ~/.bash_profile
      /etc/profile.d/

login 模式下加載順序為 /etc/profile ~/.bash_profile ~/.bashrc /etc/bashrc
no-login 模式下加載順序為  ~/.bashrc   /etc/bashrc

數組

  • 定義數組

     復制代碼 隱藏代碼IPTS=(112 324 112 54 2544)
  • 顯示數組全部元素

 復制代碼 隱藏代碼echo ${IPTS[@]}echo ${IPTS}
  • 顯示數字元素個數

 復制代碼 隱藏代碼echo ${#IPTS[@]}echo ${#IPTS}
  • 顯示第n個元素

 復制代碼 隱藏代碼echo ${IPTV[N]}

轉義與引用

特殊字符

一個字符不僅有字面意義,還有元意(meta-meaning)

  • # 注釋

  • ; 分號

  • \ 轉義符號

    \n \r \t 單個字母的轉義
    \$ \” \\ 單個非字母的轉義

  • "' 引號

    運算符(前后有空格)

  • 賦值運算符
    = 用于算數賦值和字符串賦值

  • 算數運算符
    + - * / ** %

 復制代碼 隱藏代碼c=`expr 4 + 5` //反引號
  • 數字常量
    let “變量名 = 變量值”
    變量值使用 0 開頭為八進制
    變量值使用 0x 開頭為十六進制

  • 雙圓括號
    雙圓括號是 let 命令的簡化
    (( a = 10 ))
    (( a++ ))
    echo $((10+20))

    test(判斷)

 復制代碼 隱藏代碼test expression

當 test 判斷 expression 成立時,退出狀態為 0,否則為非 0 值。
test 命令也可以簡寫為[]:

 復制代碼 隱藏代碼[ expression ]

注:[]和expression之間的空格,這兩個空格是必須的,否則會導致語法錯誤。

  • 文件類型判斷

 復制代碼 隱藏代碼-b filename        判斷文件是否存在,并且是否為塊設備文件。-c filename        判斷文件是否存在,并且是否為字符設備文件。-d filename        判斷文件是否存在,并且是否為目錄文件。-e filename        判斷文件是否存在。-f filename        判斷文件是否存在,井且是否為普通文件。-L filename        判斷文件是否存在,并且是否為符號鏈接文件。-p filename        判斷文件是否存在,并且是否為管道文件。-s filename        判斷文件是否存在,并且是否為非空。-S filename        判斷該文件是否存在,并且是否為套接字文件。
  • 文件權限判斷

 復制代碼 隱藏代碼-r filename        判斷文件是否存在,并且是否擁有讀權限。-w filename        判斷文件是否存在,并且是否擁有寫權限。-x filename        判斷文件是否存在,并且是否擁有執行權限。-u filename        判斷文件是否存在,并且是否擁有 SUID 權限。-g filename        判斷文件是否存在,并且是否擁有 SGID 權限。-k filename        判斷該文件是否存在,并且是否擁有 SBIT 權限。
  • 文件比較

 復制代碼 隱藏代碼filename1 -nt filename2        判斷 filename1 的修改時間是否比 filename2 的新。filename1 -ot filename2        判斷 filename1 的修改時間是否比 filename2 的舊。filename1 -ef filename2        判斷 filename1 是否和 filename2 的 inode 號一致。
  • 數值比較

 復制代碼 隱藏代碼num1 -eq num2        判斷 num1 是否和 num2 相等。num1 -ne num2        判斷 num1 是否和 num2 不相等。num1 -gt num2        判斷 num1 是否大于 num2。num1 -lt num2        判斷 num1 是否小于 num2。num1 -ge num2        判斷 num1 是否大于等于 num2。num1 -le num2        判斷 num1 是否小于等于 num2。
  • 字符串比較

 復制代碼 隱藏代碼-z str        判斷字符串 str 是否為空。
-n str        判斷宇符串 str 是否為非空。
str1 = str2
str1 == str2        =和==是等價的,都用來判斷 str1 是否和 str2 相等。
str1 != str2        判斷 str1 是否和 str2 不相等。
str1 \> str2        判斷 str1 是否大于 str2。\>是>的轉義字符,這樣寫是為了防止>被誤認為成重定向運算符。
str1 \< str2        判斷 str1 是否小于 str2。同樣,\<也是轉義字符。
  • 邏輯判斷

 復制代碼 隱藏代碼expression1 -a expression        邏輯與,表達式 expression1 和 expression2 都成立,最終的結果才是成立的。
expression1 -o expression2        邏輯或,表達式 expression1 和 expression2 有一個成立,最終的結果就成立。
!expression        邏輯非,對 expression 進行取反。

注:當你在 test 命令中使用變量時,我強烈建議將變量用雙引號""包圍起來

流程控制

 復制代碼 隱藏代碼if conditionthen    command1 
    command2
    ...
    commandNelse    commandfi
 復制代碼 隱藏代碼case 值 in模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;esac
 復制代碼 隱藏代碼for var in item1 item2 ... itemNdo    command1
    command2
    ...
    if condition
        then                break        fi    commandNdone
 復制代碼 隱藏代碼while conditiondo    command    if condition
        then                continue        fidone
 復制代碼 隱藏代碼until conditiondo    commanddone

函數

 復制代碼 隱藏代碼funname(){
        local var        //局部變量    action;
    echo $1 $2 $3 … $n //參數    [return int]
}
funname 1 2 3
 復制代碼 隱藏代碼#!/bin/bash# signal demotrap "echo sig 15" 15trap "echo sig 2" 2echo $$while :do  :done

kill 默認發送15號信號;
ctrl + c 默認發送2號信號;
利用trap信號捕獲,可以防止腳本被kill(除了用kill -9以外)

系統腳本

系統自建函數庫

 復制代碼 隱藏代碼/etc/init.d/functions

使用 source 函數腳本文件“導入”函數

計劃任務

  • 一次性計劃任務 at

 復制代碼 隱藏代碼at 18:12 //在18:12執行
atq //查看一次性任務
  • 周期性計劃任務 cron

 復制代碼 隱藏代碼crontab -e //配置任務
crontab -l //查看任務
min hour data mon week //配置格式

注:命令的路徑問題

  • 計劃任務加鎖

 復制代碼 隱藏代碼anacontab 延時計劃任務
flock 鎖文件

鏈接地址:https://www.52pojie.cn/thread-1822001-1-1.html

[我要糾錯]
文:宋聰喬&發表于江蘇
關鍵詞: Shell 腳本 這是 Shell 腳本

來源:本文內容搜集或轉自各大網絡平臺,并已注明來源、出處,如果轉載侵犯您的版權或非授權發布,請聯系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點保持中立,對所包含內容的準確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點負責,僅作分享之用,文章版權及插圖屬于原作者。

點個贊
0
踩一腳
0

您在閱讀:linux實戰技能100講(筆記)第四章

Copyright?2013-2024 JSedu114 All Rights Reserved. 江蘇教育信息綜合發布查詢平臺保留所有權利

蘇公網安備32010402000125 蘇ICP備14051488號-3技術支持:南京博盛藍睿網絡科技有限公司

南京思必達教育科技有限公司版權所有   百度統計

主站蜘蛛池模板: 午夜国产羞羞视频免费网站 | 日韩国产一区二区 | 成人1000部免费观看视频 | 狠狠狠狠狠狠狠狠狠狠 | 日本一本一区二区 | 天天爱天天干天天操 | 成年人视频在线 | 中文字幕精品亚洲无线码二区 | 青青青青草 | 精品国产日韩亚洲一区二区 | 日韩欧美国产高清 | 日韩一区二区三区在线观看 | 亚洲一区免费视频 | 在线看免费毛片 | 污宅男666在线永久免费观看 | 黄色私人影院 | 91麻豆极品在线观看 | 高清影院|精品秒播3 | 日日做夜夜做 | 久久九九综合 | 欧美精品福利在线视频 | 521色香蕉网在线观看免费 | 国产欧美大片 | 亚洲一级特黄 | 婷婷国产在线 | 天堂中文资源在线观看 | 三级色网站 | 日韩免费影视 | 精品区卡一卡2卡三免费 | 成人免费网站在线观看 | 日本精品区 | 国产欧美日韩一区 | 嘿嘿午夜 | 免费a级毛片在线播放 | 94在线成人免费视频 | 亚洲欧美精品综合中文字幕 | 欧美综合亚洲 | 九九热免费在线视频 | 国产特黄一级一片免费 | 放荡的美妇一区二区三区 | 欧美成人家庭影院 |
最熱文章
最新文章
  • 阿里云上云鉅惠,云產品享最低成本,有需要聯系,
  • 卡爾蔡司鏡片優惠店,鏡片價格低
  • 蘋果原裝手機殼