shell_basic

来源:http://www.cnblogs.com/george-guo/archive/2017/06/26/7081083.html
-Advertisement-
Play Games

1、回顧基礎命令 2、腳本 3、變數 4、別名 5、條件判斷 6、test判斷 一、回顧基礎命令 shutdown --關機/重啟 exit --退出當前shell rmdir --刪除空目錄 du --查看目錄占用的存儲空間 df --查看已 經掛載的文件系統的空間使用情況 ln --創建鏈接 c ...


1、回顧基礎命令 2、腳本 3、變數 4、別名 5、條件判斷 6、test判斷   一、回顧基礎命令 shutdown --關機/重啟 exit --退出當前shell rmdir --刪除空目錄 du --查看目錄占用的存儲空間 df --查看已 經掛載的文件系統的空間使用情況 ln --創建鏈接 cat --顯示文件的所有內容 head --顯示文件的頭部 tail --顯示文件的尾部 less --分屏/分頁 顯示文件內容 dirname --取出目錄 basename --取出文件名 history --歷史命令 1、ln # ln -s [目標] [源 -- 創建軟鏈接 (symbolic link) # ln [目標] [源] -- 創建硬鏈接 2、cat concatinate,把文件的內容按順序連接起來,輸出到標準輸出。目前,只需要簡單理解成顯示文件的內容即可 # cat f1 -- 顯示文件 f1 的內容到屏幕上 # cat -n f1 -- 顯示文件的內容,並且加上行號 # cat -A f1 -- 列印出一些不可見的字元和位置標記 3、head 讀取文件的頭部 # head -n 3 /etc/passwd --讀取文件前面三行 # head -n -3 /etc/passwd --讀取文件時,丟掉文件的後三行; # head -c 3 /etc/passwd --讀取文件的前面三個位元組 # head -c 10m /dev/zero > f1 --創建一個10M的文件 4、tail 讀取文件的尾部 # tail -n 3 /etc/passwd -- 讀取文件的後面三行 # tail -c 3 /etc/passwd -- 讀取文件的後面三個位元組 # tail -n +28 /etc/passwd -- 讀取文件中從第28行開始直到結尾的所有行 # tail -f /etc/passwd -- 跟蹤文件尾部內容的變化,常用觀察日誌文件的變化 5、history # set -o history --啟用命令歷史功能 ,預設記錄在文件 ~/.bash_history 中 # set +o history --關閉命令歷史功能 # history --顯示最近n條歷史命令 註:以下三個變數用於控制命令歷史的數量,以及是否記錄時間戳 # vim /etc/bashrc --一般配置在該文件當中,用戶級可配置在 ~/.bashrc HISTSIZE=1000000 --最多存儲多少條記錄 HISTFILESIZE=2000000 --命令歷史文件的最大尺寸 HISTTIMEFORMAT='[%Y-%m-%d %H:%M:%S] ' --命令歷史的時間戳格式 export HISTSIZE HISTFILESIZE HISTTIMEFORMAT --把他們定義成環境變數   二、腳本 1、如何執行腳本    # vim test.sh     #!/bin/bash   echo 'hello world' # bash test.sh # bash -x test.sh --顯示腳本執行過程的信息 # sh test.sh # source test.sh # . test.sh --上述兼為非標準執行腳本,腳本文件可以沒有可執行許可權;下列為標準執行: # head -n 1 test.sh #!/bin/bash # chmod a+x test.sh # ./test.sh 可直接將腳本放到 PATH 路徑下,直接當命令運行 註意:shell 必須以 #! 開頭,讀作sha-bang,這兩個字元用來標識文件類型,#! 用來告訴系統,這個文件里的內容將要用指定的解釋器來解釋,#! 之後的字元串將會被解釋成一個程式,該程式用來解釋當前文件。如果沒有提供sha-bang這一行,當前 shell 將會自主猜測一個,但結果並不保證和預期一致;所以最好明確指定。./test.sh 的運行流程: 1、內核讀取該腳本,檢查文件類型標記,獲取解釋氣得路徑; 2、內核運行解釋器; 3、解釋器運行起來後,就打開腳本文件,解釋其執行 linux 自帶的諸多解釋器:#!/bin/bash;#!/bin/sh;#!/usr/bin/perl;#!/bin/sed;#!/bin/awk 2、四則運算符 + - * / $(()) $[] expr let # echo $((38%5)) --取餘 # echo $[38/5] --求商 # echo $((10**2)) --10的平方 2.1、expr # expr 14 % 9 --取餘 # expr 34 / 9 --求商 # expr 30 \* 3 --使用乘號時,必須用反斜線屏蔽其特定含義 # expr index "sarasara" a --抓取第一個字元數字串出現的位置 # expr substr "this is a test" 3 5 --抓取字串 # expr length "this is a test" --計算字串長度 2.2、let let計算工具用於執行一個或多個表達式,變數計算中不需要加上 $ 來表示變數。如果表達式中包含了空格或其他特殊字元,則必須引起來 # no=20 # let no++ --自增 # let no-- --自減 # let no+=10 --自增10 # let no=no+10 --同上 # let no-=15 --自減15 # let a=5+4 --變了a無須加 $ 符號 # echo $a 3、shell配置文件 /etc/profile --全局配置文件, /etc/bashrc --全局配置文件,一般用來定義環境變了 ~/.bash_profile --用戶配置文件 ~/.bashrc --用戶配置文件 ~/.bash_logout --用戶配置文件,login shell 退出時會讀取該文件 4、shell種類 根據shell 的啟動方式不同,可以大致地把shell分為以下幾種: login shell --在文本界面登錄,如su -;讀取shell配置文件順序如下: /etc/profile——~/.bash_profile——~/.bashrc——/etc/bashrc interactive shell --gnome-terminal 中預設的shell;讀取shell配置文件順序如下: ~/.bashrc —— /etc/bashrc non-interactive shell --用來運行腳本的shell   4.1、在~/.bashrc 中設置一個變數 v,要求該變數只出現在交互shell中 # vim ~/.bash_profile --標識shell 是否登錄shell LOGINSHELL=1 # vim ~/.bashrc --不是登錄shell 時,才設置變數 if [ "$LOGINSHELL" != 1 ];then v="interactive shell only" fi 5、命令優先順序 別名 > 函數 > 內部命令 > 外部命令 6、shell特殊字元 對於shell來說,有些字元除了它本身的意義之外,還有特殊的意義,如果要在字元串中包含特殊字元,就必須通過引用(quoting)的方法來去除特殊字元的特殊意義。以下列出的是部分特殊字元: ~ --不被引用的話將會被shell 替換成家目錄 & --把程式放到後臺執行 $ --dollar 符,可用於參數展開 ${} --變數處理,可對變數的內容做替換,刪除,抽取等操作 * --星號,通配符,匹配所有字元 ? --問號,通配符,匹配任意一個字元 () --命令組 {} --命令組 "" --雙引號,引用符號;可以去除大多數特殊字元的特殊意義,除 $;`;!;\ 外 '' --單引號,引用符號;可以去除所有特殊字元的特殊意義,除自己本身 . --相當於source命令;可用於設置隱藏文件;用於目錄名時,代表當前目錄 / --斜杠,路徑分隔符,根目錄 \ --反斜杠,可用來去除單個字元的特殊意義,也就是所謂的“轉義“,也可用於表示特殊字元,如換行符 (\n) `` --反撇號,命令優先執行,和$()含義是一樣的;如果有嵌套那麼不能用``號 $(())和 $[] --運算符 : --空命令 ; --命令分割;不去考慮上一條命令所執行的結果 ;; --case 選項的結束符 # --註釋 && --邏輯與;可對命令進行分割;但是需要考慮上一條命令所執行的結果 || --邏輯或;可對命令進行分割;不需要考慮上一條命令執行結果 ---------------------------------------------------------------- # echo 'hello world;' "hello world;" hello\ world; --用三種引用符合去除空格的特殊意義   三、變數 1、本地變數 當前用戶自定義的變數;當前進程有效,其他進程或者當前進程的子進程無效 # a=123 # echo $a # unset a --取消變了定義 2、環境變數 當前進程有效,並且能被子進程調用; # env --查看當前系統所有環境變數 # set --查看當前系統所有環境變數和臨時變數 # echo $PATH -- 顯示PATH變數的內容 # export hi=hello --定義環境變數;工作當中一般喜歡把即用的環境變了寫在 ~/.bash_profile 幾個常見環境變數: PATH --影響命令的搜索 PS1 --命令提示符 TMOUT --超時時間,單位為S,時間一到,自動退出 interactive shell ;所以最好將其設為只讀變數 # declare -r TMOUT=60 HISTSIZE, HISTFILESIZE, HISTTIMEFORMAT --命令歷史   3、系統變數 又叫bash中內置的變數;shell本身已經固定好的一些變數 $# --腳本後面接參數個數 $* --腳本後面所有的參數(被雙引號包含則被當成一個字元串輸出) $@ --腳本後面所有的參數(被雙引號包含還是保留各參數的邊界) $? --上一條命令執行後返回的狀態 $$ --當前進程的進程號 $! --後臺運行的最後一個進程號 !$ --最後一條命令或參數 !! --最後一條命令的歷史記錄 $0 --當前程式的程式名或進程 $1~$n --位置參數變數 #!/bin/bash echo "\$0 = $0" echo "\$# = $#" echo "\$* = $*" echo "\$1 = $2" echo "\$7 = $7" echo "\$11 = ${11}" # chmod a+x test.sh # ./test.sh a b c 4、變數定義 a、預設下,變數類型沒啥要求。可以給變數賦任何值,但是等號兩邊不能有任何的空格 b、變數名區分大小寫 c、變數名不能以數字或者特殊符號開頭 d、將命令所執行的結果保存到變數 5、調用變數 # a=$(hostname) # A=123456789 # echo $A # echo ${A:2:3} 6、數組 數組的定義:用小括弧擴起來定義數組,括弧里的元素用空格隔開 # array[0]=var1 # array[1]=var2 # array[2]=var3 # array=(var1 var2 var3) --等同於上述三行,定義數組 # echo ${array[0]} --取數組第一個值 # echo ${array[*]} --取數組所有值 # echo ${array[@]} --同上 7、declare 定義有類型的變數 -i --將變數看成整數 -r --定義只讀變數 -x --將變數導出到環境變數 -a --將變數看成數組 8、read 互動式定義變數 -p --提示信息 -n --字元數 -t --超時 -s --不顯示   四、別名 命令的別名,顧名思義,就是可以通過別的名字來執行命令。通常用於簡化命令的輸入,或者為命令增加一些參數,或者是單純地為命令添加多個訪問名稱。 # alias cp mv rm --查看cp, mv, rm這三個命令是不是別名 # unalias rm -- 刪除別名 rm # alias cdyum='cd /data/yum' -- 簡化輸入 # alias rm='rm -i' -- 為命令增加參數 -- 通常別名是在配置文件~/.bashrc 中設置的 1、驗證別名、函數、內部命令、外部命令的優先順序別 # alias pwd='echo it is an alias' --創建一個 pwd 別名 # function pwd() { echo "this is a function"; } --創建一個 pwd 函數 # pwd --運行pwd,發現輸出是別名 # unalias pwd --刪除別名,再運行 pwd,發現輸出是函數內容 # unset pwd --刪除函數,再運行 pwd,才是輸出當前所在路徑 所以:別名 > 函數 > 內部命令 > 外部命令   五、條件判斷 # vim test ---------------------- if [ 條件 ];then command... fi ---------------------- if [ 條件 ];then command... else command... fi ---------------------- if [ 條件1 ];then command1... elif [ 條件2 ];then command2... else command3... fi ---------------------- if [ 條件1 ];then command1... if [ 條件2 ];then command2... fi else if [ 條件3 ];then command3... elif [ 條件4 ];then command4... else command5... fi fi   六、test判斷 test == [ judge ] 1、文件存在與否的判斷 # vim test.sh #!/bin/bash if test -e $1;then --是否存在;還有 -p;-c;-b;-L if [ -f $1 ];then --使用 [ judge ] 替換 if test -f $1;then --是否存在並且為普通文件 if test -d $1;then --是否存在並且為目錄 if test -S $1;then --是否存在並且套接字文件 echo 'YES' fi # chmod a+x test.sh # ./test.sh [path] 2、文件許可權相關判斷 -r;-w;-x --是否有讀,寫,執行許可權 -u --是否有suid -g --是否有sgid -k --是否有t位 -s --是否為空白文件,-s表示非空;! -s 空文件 3、字元串判斷 = --等於則為真,等於號兩邊必須有空格;也可以是:== != --不相等則為真 -z 字元串 --字元串的長度為零則為真 -n 字元串 --字元串的長度不為零則為真 if test $num1 = $num2;then if [ $num1 = $num2 ];then if [ -n $num1 ];then 4、數值判斷 -eq --等於則為真 -ne --不等於則為真 -gt --大於則為真 -ge --大於等於則為真 -lt --小於則為真 -le --小於等於則為真 if test $[num1] -eq $[num2];then if [ $[num1] -eq $[num2] ];then 5、邏輯判斷 -a 和 && --邏輯與 -o 和 || --邏輯或 ! --非 優先順序:與>或>非 if test -e $1 -o -e $2;then --判斷是否有一個文件存在 if [ -e $1 -o -e $2 ];then --同上 if test ! -e $1 -o ! -e $2;then --判斷兩個文件沒有同時存在 if [ ! -e $1 -o ! -e $2 ];then --同上  
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近因為那個勒索病毒,聽了一位安全方面的專家做的的一個關於安全方面的培訓,從中學習到了許多新的知識。在如今網路如此發達的社會,我們的信息,我們的隱私,是如此簡單的就可以被泄漏出來,所以關註安全是很有必要的。 在報告的時候提到了kali linux,這個對想學習安全攻防的同學來說是一個很好的實踐工具。 ...
  • 一、版本信息 mac 10.10.5 php 5.5.38 phpstorm 10.0.3 xdebug 版本需要與php匹配,匹配地址 :點我匹配 點我查看所有版本 提示:不確定xdebug版本的,把phpinfo()顯示的全部複製(command+a 全選再command+c複製)到文本框中,x ...
  • 下麵介紹一下自己寫的python程式,主要是的知識點為sys、os、json、pickle的模塊應用,python程式包的的使用,以及關於類的使用。 下麵是我的程式目錄: bin是存放一些執行文件course.py下麵是這個文件的內容: 這個文件是對os,sys模塊的應用; BASE_DIR = o ...
  • " 1、理論基礎 " "1.1、命令行的前世今生" "1.2、命令執行規則" "1.3、使用命令歷史" " 2、使用入門 " "2.1、啟動和關閉命令行" "2.2、執行簡單的命令" "2.3、命令行執行程式使用技巧" " 3、總結 " 1、理論基礎 1.1、命令行的前世今生 談到 Windows ...
  • Supervisor介紹 Supervisor 允許其用戶在UNIX類操作系統上控制多個進程。 塊如下: 方便 需要為每個進程實例編寫rc.d腳本通常是不方便的。 rc.d腳本是進程初始化/自動啟動/管理的常用形式,但寫入和維護可能會很痛苦。此外,rc.d腳本不能自動重新啟動崩潰的進程,並且許多程式 ...
  • 原文地址:http://www.ttlsa.com/web/let infotify rsync fast/ 背景 我們公司在用inotify+rsync做實時同步,來解決分散式集群文件一致性的問題。但當web文件越來越多(百萬級數量html,jpg等小 文件),同步就越來越慢,根本做不到實時,按照 ...
  • " 探索Windows命令行系列(1):導航目錄 " " 探索Windows命令行系列(2):命令行工具入門 " " 探索Windows命令行系列(3):命令行腳本基礎 " " 探索Windows命令行系列(4):通過命令管理文件和文件夾 " " 探索Windows命令行系列(5):幾個實用的命令例 ...
  • Let's Encrypt免費又好用的證書,廢話不多說。 假設我的功能變數名稱為:163.org 1、克隆代碼 git clone https://github.com/letsencrypt/letsencrypt # 沒有git的先安裝git # yum install git # apt-get in ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...