shell 清楚空格 一起來寫乙個Shell指令碼吧

2021-10-13 23:15:49 字數 1915 閱讀 4537

說實話,寫指令碼這一塊屬實「業務不精」,一來現如今的工具已經比較方便了,二來自己還是比較懶。

正巧最近再嘗試公司的雲編譯功能,雖然雲編譯外掛程式自動做了大量的工作,但是最終也只是把產物(apk)拉到本地某檔案目錄下,因此還是需要我們主動要install。

因此基於這個場景就像寫乙個指令碼可以一鍵的把拉下的apk安裝上。

指令碼需要的能力:

接下來咱們就開整!不過...開篇咱也說了「業務不精」,所以shell還真不會寫。那麼咱們第一步就是先學一學shell的語法。

開啟語法的了解前,咱們先聊一聊什麼是shell。

首先要明確一下,shell是通用的概念,用來代指作業系統中的命令直譯器(command interpretor)。可以簡單的理解成「命令列」。

用過無gui介面的linux系統的同學應該都清楚,我們能夠和作業系統打交道的方式只能通過輸入命令。

而這個承接咱們輸入的命令並通知作業系統去執行對應操作的工具就被稱之為shell

但是通常咱們聊的shell一般都是linux下的,因為linux下的shell處理能充當命令直譯器的作用,還擁有自己的程式語言,因此極具擴充套件性。咱們的shell指令碼也是依賴了這種編譯能力...

變數:

shell中的變數定義有些「蛋疼」...不宣告任何型別,上來就是幹: name="shell",name就是乙個變數。

這裡還有乙個更「詭異」的規定:=左右不能有空格!這個點坑了我很久, name="shell",這種宣告是錯誤的

當我們使用變數的時候,需要加乙個 $符。比如我們想要列印上面定義的 name,我們需要這樣: echo $name。

說到了 $,咱們額外說一些內容: ``, $(), ${}的區別。

它倆 ``, $()屬於一類:命令的替換。這裡如何理解呢?說白了就是把寫在這裡內容的結果拿出來(就想咱們呼叫函式,拿返回值一樣)。

因此有些時候,我們可能不是為了執行某些命令,而是為了拿到命令對應的值,因此這種情況下就需要這種方式。

而 ${}和咱們日常是類似的,就是用{}的內容來替換這裡。

指令碼引數的獲取

咱們一般執行在執行命令的時候都會遇到一些引數的輸入,對於shell指令碼也是如此。想要拿到使用者輸入的引數怎麼辦?

直接這個樣子: $1,這中寫法的意思就是拿到第乙個引數,沒錯 $2就是拿到第二個引數...

函式

函式的定義也是比較神奇,無需主動宣告引數和返回值:

function getresult()
這裡定義了乙個函式,可以看到函式體沒有引數和返回值的資訊。我們要怎麼呼叫呢?

getresult $1 $2result=$?echo "$result"
這裡可能有同學注意到$?這個「奇怪」的呼叫,它的作用就是拿到上述函式的return。這裡也是shell裡「蛋疼」的一點...

執行這個指令碼後,效果是這樣的:

有了這些基礎咱們想要完成咱們需要額指令碼就比較簡單了。這裡我先直接貼**:

這樣,乙個簡單的指令碼就ok了~它能做的事情:從乙個目錄下邊找到乙個最近修改的檔案然後執行install,在start對應的activity。

shell指令碼還挺有意思,的確可以很簡單的幫我們做很多重複的工作。

學無止境,學無止境~

一起來寫web server 04

從這個版本開始,後面的 差不多是越來越難啦.這個版本,我們主要是要實現乙個執行緒池版本的web server.這個版本的設計出自unp.思想非常簡單,那就是父執行緒首先構建n多子執行緒,這些子執行緒全部爭搶全域性的一把鎖,只有搶到了鎖的執行緒才能夠呼叫accept函式,否則都會阻塞掉.執行緒池版本的...

手起刀落 一起來寫經典的貪吃蛇遊戲

小時候玩的經典貪吃蛇遊戲我們印象仍然深刻,謀劃了幾天,小時候喜歡玩的遊戲,長大了終於有能力把他做出來 從來都沒有通關過,不知道自己寫的程式,是不是能通關了.好了,閒話不多談,先來看一下效果吧!功能和小時候玩的貪吃蛇一樣,1 選擇速度 slow normal fast 2 選擇是否有牆作為障礙物 on...

一起來點讚

description 小a同學最近接了乙個專案,專案的一部分內容是設計朋友圈模組,他在寫點贊功能的時候遇到了一點麻煩。現在他的資料表裡面有如下內容資訊 zhangsan 1 lisi 2 zhangsan 2 lisi 3 wangwu 1 wangwu 2 wangwu 3 其中每一行的由兩部分...