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程式的方法:
- bash my.sh
- 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程式設計(三)流程控制(4)while迴圈和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 指定具體排序的規則