1. 程式人生 > >Shell程式設計(Linux )

Shell程式設計(Linux )

shell程式設計:解釋型語言 ---- 執行時需要一個直譯器來解釋執行    (同為解釋型語言的還有python)

c語言:編譯型語言

shell是一個作為使用者與Linux系統間介面的程式,他允許使用者向作業系統輸入需要執行的命令。

變數       

本地變數     環境變數     引數變數

在shell裡,使用變數之前通常並不需要事先為他們做出宣告,只是在給他們賦初值時來建立他們。

預設情況下,所有變數都被看做字串並以字串來儲存。

#!/bin/bash       //使用該直譯器

myvar="Hello World"
echo $myvar       //$  表示取myvar的值
echo "$myvar"     // "" 加雙引號表示的同上
echo '$myvar'     //''單引號不會發生替換
echo \$myvar      //在$前面加\可以取消$的特殊含義
#!/bin/bash

fun()
{
    local mystr=hello
//只定義一個mystr是可以被該函式外部訪問的,但是加上local就不可以。或者在函式結束加unset mystr

    echo "fun run"
    echo "\$#=$#"
    echo "\$1=$1"
    echo "\$2=$2"

    unset mystr
}

fun hello abc 1234
    echo "$mystr"
    echo "my.sh run"
    echo "\$#=$#"
    echo "\$1=$1"
    echo "\$2=$2"

執行shell程式的方法:

  1. bash my.sh
  2. chmod u+x my.sh (先改變許可權)     ./my.sh

比較

控制結構 

if   elif     else    fi

#!/bin/bash
 
echo "stdin"        //手動輸入
read line            //讀取一行(讀取輸入的)

//下面就是if   else if    else  具體的應用
if [ "$line" = "3" ]
then
    echo "is 3"
elif [ "$line" = "1" ]
then
    echo "is 1"
else
   echo "no"
fi
第一類:數字性迴圈
-----------------------------
for1-1.sh

#!/bin/bash  
  
for((i=1;i<=10;i++));  
do   
echo $(expr $i \* 3 + 1);  
done  
-----------------------------
for1-2.sh

#!/bin/bash  
  
for i in $(seq 1 10)  
do   
echo $(expr $i \* 3 + 1);  
done   
-----------------------------
for1-3.sh

#!/bin/bash  
  
for i in {1..10}  
do  
echo $(expr $i \* 3 + 1);  
done  
-----------------------------
for1-4.sh

#!/bin/bash  
  
awk 'BEGIN{for(i=1; i<=10; i++) print i}'  
第二類:字元性迴圈
-----------------------------
for2-1.sh

#!/bin/bash  
  
for i in `ls`;  
do   
echo $i is file name\! ;  
done   
-----------------------------
for2-2.sh

#!/bin/bash  
  
for i in $* ;  
do  
echo $i is input chart\! ;  
done  
-----------------------------
for2-3.sh

#!/bin/bash  
  
for i in f1 f2 f3 ;  
do  
echo $i is appoint ;  
done  
-----------------------------
for2-4.sh

複製程式碼
#!/bin/bash  
  
list="rootfs usr data data2"  
for i in $list;  
do  
echo $i is appoint ;  
done  
複製程式碼
第三類:路徑查詢
-----------------------------
for3-1.sh

#!/bin/bash  
  
for file in /proc/*;  
do  
echo $file is file path \! ;  
done  
-----------------------------
for3-2.sh

#!/bin/bash  
  
for file in $(ls *.sh)  
do  
echo $file is file path \! ;  
done  

while

#!/bin/bash
i=0
while [ : ]        //死迴圈
do
   printf "this is $i th\n"

   let "i+=1"
    if [ "$i" -eq "3" ]
    then
       break
    fi
done

case

#!/bin/bash
echo "stdin"
read line

while [ "$line" != "end" ]
do
   case "$line" in
       yes | y ) echo "this is yes" ;;
       no | n ) echo "this is no" ;;
       * ) echo "*****" ;;
    esac
    echo "stdin"
    read line
done

命令

  • break    跳出迴圈
  • :   相當於true的別名
  • continue  跳到下一次迴圈繼續執行,迴圈變數取迴圈列表中的下一個值
  •  .    . ./shell   預設情況下,當一個指令碼執行一條外部命令或指令碼程式時,會建立一個新的環境,命令將在這個新的環境中執行。在命令執行完畢後,該環境被丟棄。但是,source命令和點命令在執行命令時,使用該指令碼程式的同一個shell。
  • echo   輸出結尾帶有換行符的字串
  • eval    允許你對引數進行求值,有點像一個額外的$,它給出一個變數的值的值。

  • exec  

  • exit n     使指令碼程式以退出碼n結束執行
  • export   將作為它引數的變數匯出到子shell中,並使之在子shell中有效。
  • expr   將它的引數作為一個表示式來求值
  • 等等......  更多命令參考《Linux程式設計第4版》2.6.5

腳本里呼叫c程式,直接寫 ./main         (main 函式名)

c程式裡面調指令碼程式  建立一個子程序,在子程序裡呼叫

相關推薦

Shell程式設計Linux

shell程式設計:解釋型語言 ---- 執行時需要一個直譯器來解釋執行    (同為解釋型語言的還有python) c語言:編譯型語言 shell是一個作為使用者與Linux系統間介面的程式,他允許使用者向作業系統輸入需要執行的命令。 變數        (本

linux學習筆記之shell程式設計

shell程式設計 基礎正則表示式 正則和萬用字元的區別:正則是包含匹配,匹配檔案內容,grep,awk等支援正則表示式。萬用字元是完全匹配,匹配檔名,例如find,ls不認識正則表示式 ####正則

linux學習筆記之shell程式設計流程控制3---for迴圈

for迴圈 語法格式1:指定迴圈範圍 for 變數 in value1 value2... do something done 指令碼例項1 #!/bin/bash for i in 1 2

linux學習筆記之shell程式設計流程控制4while迴圈和until迴圈

while迴圈和until迴圈 ###、 while迴圈 不定迴圈,程式碼格式: while [判斷] do something done 指令碼例項1: #!/bin/bash #從1加到

linux學習筆記之shell程式設計條件判斷

條件判斷 檔案存在與否 -d 是否存在為目錄 -e 是否是檔案 -f 是否存在為檔案 [-d /root && echo "yes" || echo "no"] -檔案讀寫執行許可權#### -r 讀許可權 -w 寫

linux學習筆記之shell程式設計正則表示式與字元處理

shell程式設計 基礎正則表示式 正則和萬用字元的區別:正則是包含匹配,匹配檔案內容,grep,awk等支援正則表示式。萬用字元是完全匹配,匹配檔名,例如find,ls不認識正則表示式 ####正則表示式常用的字元(注意區別於萬用字元裡面的符號)#### -*

Linux Shell程式設計17——巢狀迴圈

巢狀迴圈就是在一個迴圈中還有一個迴圈,內部迴圈在外部迴圈體中.在外部迴圈的每次執行過程中都會觸發內部迴圈,直到內部迴圈執行結束.外部迴圈執行了多少次,內部迴圈就完成多少次.當然,不論是外部迴圈或內部迴圈

Linux Shell程式設計11——退出和退出狀態

exit命令一般用於結束一個指令碼,就像C語言的exit一樣。它也能返回一個值給父程序。每一個命令都能返回一個退出狀態(有時也看做返回狀態).一個命令執行成功返回0,一個執行不成功的命令則返回一個非零值,此值通常可以被解釋成一個對應的錯誤值。除了一些例外的情況,一個行為端莊的

Linux Shell 程式設計

從程式設計師的角度來看, Shell本身是一種用C語言編寫的程式,從使用者的角度來看,Shell是使用者與Linux作業系統溝通的橋樑。使用者既可以輸入命令執行,又可以利用 Shell指令碼程式設計,完成更加複雜的操作。在Linux GUI日益完善的今天,在系統管理等領域

第二十章 Shell程式設計

20.27 分發系統介紹 20.28 expect指令碼遠端登入 #! /usr/bin/expect set host "192.168.93.128" set passwd "123456" spawn ssh [email protected]$host expect

第二十章 Shell程式設計

20.16 shell中的函式(上) $0 取指令碼的名稱   $# 取當前指令碼的引數 20.17 shell中的函式(下) 網絡卡名冒號後面記得加空格 20.18 shell中的陣列

第二十章 Shell程式設計

20.1 Shell指令碼介紹 20.2 Shell指令碼結構和執行 20.3 date命令用法 Y年 m月 d日 [[email protected] shell]# date +%Y%m%d 20181026 H小時 M分鐘 S秒&nb

刪除過期檔案的shell指令碼linux

在linux下如何刪除過期的檔案 crontab -e  中新增      0 0 * * * find /home/jms -type f -mtime +2 -exec&

shell程式設計3

shell專案——分發系統 對於大公司而言,肯定時不時會有網站或者配置檔案更新,而且使用的機器肯定也是好多臺,少則幾臺,多則幾十甚至上百臺。這樣的話一臺一臺配置肯定是不現實的,所以,自動同步檔案是至關重要的。 而要如何實現自動同步呢?首先要有一臺模板機器,把要分發的檔案準

Shell程式設計

Bash break break是退出迴圈的一個簡單方法, 用break命令來退出任意型別的迴圈,包括while和until迴圈 退出單個迴圈: for的break [[email protected] ~]# more s1.sh #!/bin/ba

第十九章 Shell程式設計

一、shell中的函式 二、shell中的陣列 三、告警系統需求分析 四、告警系統主指令碼 五、告警系統配置檔案 六、告警系統監控專案 七、告警系統郵件引擎 八、執行告警系統   一、shell中的函式 函式就是把一段程式碼整理到了一個小單元中,並給這個小單元起一個名字,當用到

Shell程式設計基礎

Shell基礎學習筆記 一、別名與快捷鍵 二、歷史命令 三、輸出重定向 四、管道符 五、萬用字元 一別名與快捷鍵 別名命令:alias 設定別名命令:alias vi=’vim’ 寫入環境變數配置檔案:vi ~/.bashrc 刪除別名:unalias 別名 常用快捷鍵

小鳥初學Shell程式設計變數引用及作用範圍

變數引用 那麼定義好變數,如何列印變數的值呢?舉例下變數引用的方式。 ${變數名}稱作為對變數的引用 echo ${變數名}檢視變數的值 ${變數名}在部分情況下可以省略成 $變數名 [root@lincoding ~]# string="hello Shell" [root@lincoding ~]#

Linux程式設計Linux shell程式設計的例子:批量處理檔案

各位看官們,咱們今天還是接著上一回的內容,列舉具體的例子給大家。閒話休說,言歸正轉。 各位看官們,在實際的工作中經常需要批量處理檔案,比如批量刪除檔案等。咱們今天就通過例子來說明 如何批量操作檔案

linux —— shell 程式設計文字處理

導讀 本文為博文 linux —— shell 程式設計(整體框架與基礎筆記)的第4小點的拓展。(本文所有語句的測試均在 Ubuntu 16.04 LTS 上進行) 1、基本文字處理 sort :用於排序,常用引數 -t 指定一行的分隔符 -k 指定具體排序的規則