學了三年的 Linux 了,我現在不能立馬寫出乙個簡單的 shell 指令碼,怎麼回事啊?

時間 2021-05-09 20:50:46

1樓:pubut

沒經常用,是這樣的;如果只是簡單的busybox基礎命令應該不至於吧,可能就是沒經常用命令而已,現在很多linux開發的都是用的windows下的圖形整合環境,根本不需要寫命令。shell就是乙個個可執行程式的集合,你想一下,有些複雜的軟體,你光熟悉原理熟悉有哪些引數就需要弄很久,還不要說乙個集合了。

2樓:守望

猜測題主雖然學了三年的Linux,但實際上基本沒有完整的學習過shell的語法。就像用了N年的windows,還是不能立馬寫出乙個簡單的批處理指令碼一樣。

建議可以找本書或者資料,像學習一門語言一樣,學一下這些基本的語法。其他,那就看你對Linux命令的熟悉程度了。

當然,編寫的shell指令碼有沒有什麼問題,或者有什麼優化的地方,也可以使用shellcheck(有命令列版本)檢查一下,有沒有潛在的問題,一目了然。

另外,也有一些寫shell的建議或者實踐,不一定完全適用,但也是非常有幫助的。

看完這篇,寫的shell指令碼更加健壯了!

3樓:黃凱

本來一直是研究前端的

有段時間自學搞了下伺服器自動化部署

(沒有服務端光前段太麻煩了, 有了服務沒自動化部署又感覺麻煩, 我是懶人哈哈)

後來發現要精準實現目的光靠工具不行

理解了下指令碼語法流程行為規則

連學帶測試也就3個小時搞定了吧

我覺得你這個是學習方法問題吧要用而學學而用多多動手

4樓:

因為,你學Linux學不到寫shell啊。

你應該看bash語言的教程或者手冊才行。當然,根據需要,也可能是其它shell語言,ash,zsh等等。

我工作上需要寫CICD自動化指令碼,最近才練了一下shell。因為自動化用的容器container環境一般都是極度精簡的linux環境,什麼python,perl想都別想了。有的甚至只有busybox環境。

然後,又因為是受限的網路環境,白名單以外的位址都訪問不了。所以,也不能在容器裡先安裝軟體。當然,出於效能原因也不能安裝大量軟體。

於是,剩下的就只有shell可以用了。基本上,會ash和bash就行了。不少容器基於alpine linux的,只能用ash寫。

其它的,基本上bash可以。

總之,作為一門程式語言,學一下就好了。

5樓:小北

用python、ruby、甚至用巨硬家的powershell (能跨平台)來寫不是更好

shell 這東西寫了時間長了,再拿出都不知道是個啥

6樓:satanson

寫指令碼需要三神器grep,awk,sed加持;這些東西需要除錯,心智負擔過重,使用不便. 推薦使用perl和ag,統一的強大的perl正則通吃一切.

想掌握使用技巧

satanson:shell程式設計的若干實用技巧然後是寫乙個一些功用指令碼複製再複製

satanson/tidb_docker

satanson/k8s_deploy

satanson/ceph_docker

7樓:

因為bash確實歷史包袱太重,缺乏系統性設計。

拋棄那些舊式怪咖,來用fish和powershell吧!

8樓:Glavo

我甚至連bash語法都記不清,但我也覺得沒有必要去記清,日常命令記住就行了,複雜指令碼還是用 Ammonite 寫最方便,magic import 用起來遠比 PowerShell 這種半殘要好不少,而且有 IDEA 的完全支援,綜合體驗很舒服。

9樓:水dong方塊

看我文章https://

zhuanlan /p/347360331

肯定可以寫出來,linux的東西實在太多太多了,有的人關注這一方面有的人關注另一方面。

10樓:Torrekie

不是你的問題,不是你的問題

寫shell真的太燒腦了哈哈哈,原本用其他程式語言可以很輕鬆實現的功能,在shell裡面要坐在螢幕前面盯個大半天,還要擔心執行錯誤之後會不會出什麼事情。

尤其是做shell安裝指令碼的時候,我們希望只用乙個指令碼就可以在大部分類unix上使用,就需要不停的查資料或者親自測試,然後還要找可以參與測試的使用者來協助我們,來回打磨幾百次之後才能拿出乙個差不多能用的指令碼。

當然這也看你如何定義「簡單」,如果你說的簡單是指類似「./divide 9 3」然後輸出「3」這種指令碼,那確實沒什麼問題,但是稍微複雜一點就要考慮shell的特性,很麻煩。

11樓:Paco

我用了十幾年Linux, 我也白手寫不出,不過我有好多之前自己寫過的可以抄,還會用搜尋引擎。

多做實踐,然後通過做筆記,github之類的積累自己的經驗,通過搜尋利用別人的經驗,唯手熟爾。

12樓:sinux

我知道許多「學了」好幾年的人是怎麼回事。

就是知乎上聲稱windows就是最好的linux發行版的人,就是聲稱mac跟linux「基本一樣」的人。

這類linux「使用者」的共同點是:只是把linux當成乙個萬般無奈必須應付的敵人。

總是能在有關linux的問題下看到大量的這種雲使用者給別人支招:用mac吧,用虛擬機器吧,用xx雲伺服器即可,樹莓派足夠了,不用裝桌面。如此等等。

GNU/linux,也就是我們常說的linux是乙個完備的,通用的,高階的,可靠的,強大的作業系統。是出於程式設計師之手,為程式設計師創造的作業系統。windows,首先是為商務人士和小白家庭使用者準備的,mac首先是為前台小妹和平面設計師等星巴克人員準備的。

只有linux是首先專門為程式設計師準備的。

視linux為一種補充,一種備選,一種不得不用的蹩腳工具,絕對不可能把它用得得心應手。

別說三年,英語學了十幾年,還不是一塌糊塗?

你得沉浸式的用了三年,才行。無他,唯手熟爾。

13樓:大包

我認為不能立馬寫出來是正常的,寫好乙個shell指令碼需要兩方面的知識1 shell的語法

2 相關命令的使用

編寫過程需要

1 整理指令碼執行步驟

2 將每一步使用shell或命令實現

14樓:majormeng

shell不夠直觀......而且,關鍵是要知道好多命令。就算打不出來,但是大概要知道啥時候用啥命令,然後去man.....

那簡直了....重心還是多往程式語言上放放吧,如果不做運維的話。

15樓:

你是學了三年 Linux,還是自第一天學習 Linux,已經過了三年?

這玩意無法雖然很一樣,但是說到底也就是指令碼語法而已。認真練一練,乙個星期,google-oriented 地寫出來有到底有多難。

16樓:凌豪

我個人覺得

Linux主要不是靠學去記,要靠用記...

熟悉了一種shell語言的大概語法之後,一定要用,一開始慢一點沒事兒用用就全都會了

17樓:今晚月亮很美

是不是沒有專門學習shell?

shell不是簡單的命令列的堆砌

可以自定義變數,進行複雜的程式設計

一般用來啟動服務、關閉服務、執行資料庫操作、檔案和目錄的操作可以先在網上找一些例子,自己做一些修改,出錯了多研究一下如何解決賣油翁裡面有一句話很好:我亦無他,唯手熟爾,計算機的大多數平時用到的技術都是可以通過科學的多次練習達到熟練的程度的~加油!fighting!

18樓:

個人經驗:寫shell要注意積累,形成自己的一套模組。這裡我常用的幾點:

使用 function 封裝命令。

使用 source 載入 function 所在的檔案。

使用 type 快速檢視和理解對應函式的功能。

使用 $() 獲取命令的標準輸出

使用 function 和 here documents 記錄更加詳細的筆記

使用 bash -x 追蹤

舉乙個簡單的例子,列印日誌需要包含時間資訊。那麼可以構建乙個msg函式,我在命名時最後追加乙個冒號,這樣看起來更像在說一句話。

#!/bin/bash

function msg:()

假設這段指令碼位於 util.sh 中, 那麼就需要 source util.sh 載入。

然後在命令列終端下,就可以這麼使用:

$ source util.sh

$ msg: "hello, world"

==MSG: Sun Jan 17 10:59:07 CST 2021

== hello, world

如果未來想要增加顏色,只需要修改 msg: ,不需要修改其他部分。

如果過了一段時間,忘記 msg: 怎麼使用,那麼可以用 type 提示一下自己

$ type msg:

msg: is a function

msg: ()

除此之外,可以用 here document 記錄筆記,更新util.sh,增加函式 msg:doc

#!/bin/bash

function msg:()

function msg:doc()

在終端下,重新source util.sh:

$ source util.sh

$ msg:doc

Usages of msg:

$ msg: "log info..."

$ msg: "hello"

"world"

使用 msg:doc 這種命名方式,就可以把平時常用的命令列引數記錄在function中,然後用的時候可以快速檢視。例如要記錄sed的筆記,就寫到 sed:

doc 這樣乙個function中。

和男朋友三年了現在異地 總是愛答不理 說我不過去找他就和我分手?

Rachel 男生用他的方式,在跟你提要求,也是變相的權力顯示,也想驗證你有多愛他。你男朋友的安全感比較弱,但也蠻會對你對技 套路 這不是不好,很好。說明他對你有需求,但這個需求讓你不舒服,你得說,不然你會一直被這樣各種事情的去驗證。相信你們的三年裡,他對你的要求,多多少少都這類方式 且到最後都是我...

學醫學三年了,馬上大四了,不想繼續學了?

羅羅 無論如何,都應該讀畢業,拿到畢業證再說。畢業以後如果你不打算幹醫生,有了畢業證。其實還是有很多很多醫學相關的工作可以找的! 大佬的肝用不完 學位證一定要拿到手,它是你今後步入社會的敲門磚。其實我覺得上大學就是為了這個東西,如果你連這個東西都沒有,那當初日夜苦讀的目的又是什麼呢?如果你現在放棄,...

我和女友都是88年的,已經處了三年了,現在女友急著結婚,但是我一點心理準備都沒有,我該怎麼辦?

晚風 前男友也是,拖了五年,說結婚臨陣脫逃,我想說不想結婚能早點分手也是真愛的表現,她會感激你的放手。可惜兩個曾經說天長地久的人轉眼還是分道揚鑣,人與人之間很微妙,他習慣了你的存在,依賴你,卻有著很多其他藉口,你也沒辦法,早點想清楚吧老鐵,畢竟曾經愛過。 男九號 我跟我女朋友也是88年的,我們在一起...