linux shell 編程

shell的作用

  • shell是用戶和系統內核之間的接口程序
  • shell是命令解釋器

shell程序

Shell程序的特點及用途:

  • shell程序可以認為是將shell命令按照控制結構組織到一個文本文件中,批量的交給shell去執行

  • 不同的shell解釋器使用不同的shell命令語法

  • shell程序解釋執行,不生成可以執行的二進制文件

  • 可以幫助用戶完成特定的任務,提高使用、維護系統的效率

  • Shell使用解釋型語言,不需重新編譯

  • 它適合于編寫執行相對簡單的任務的工具,因為它更強調易于配置、維護和可移植性

  • 它不適合用來完成時間緊迫型和處理器忙碌型的任務
    image.png

變量

變量是弱類型的

  1. 聲明變量不用聲明類型
  2. 可以存儲不同類型的內容
  3. 大小寫區分

變量聲明及賦值格式

格式:變量=值 (注意:等號兩側不能有空格)
例如:

  • a=”hello world”
  • a=hello world
  • b=9

變量的引用
格式:

  1. $變量名
  2. ${變量名}

變量名為一個字符用方式1,變量名多于一個字符建議用方式2
例子:

  • a=1
  • abc=“hello”
  • echo $a
  • echo ${abc}
  1. 如果字符串里包含空格,就必須用引號把它們括起來
  2. 等號兩邊不能有空格!!!
  3. 默認情況下,所有輸入的內容都是字符串

單引號,雙引號,倒引號

  • 倒引號括起來的字符串被shell解釋為命令行,在執行時shell會先執行該命令行,并以它的標準輸出結果取代整個倒引號部分

  • 由單引號括起來的字符都作為普通字符出現

  • 如果在參數中包含一個或多個空白字符,必須給參數加雙引號。如果把一個帶有$字符的變量放在雙引號中,程序執行到該行時會把變量替換為它的值.

可用\字符取消$ 的特殊含義 \ $

位置變量

bash在解釋用戶命令時,會把所輸入的命令后面的參數使用位置變量傳遞給bash腳本程序
$1、$2…$n分別代表參數1、參數2…參數n

$0則代表腳本的名字

有關位置變量還有另外三個。

  • $*:這個變量包括參數的列表(字符串)。
  • $@:這個變量包括參數的列表(數組)。
  • $#:這個變量包括參數的個數。

image.png

環境變量

Shell運行時自動設置的一些變量稱為環境變量,由Shell維護和管理。

image.png

只在shell程序中可用的變量

image.png

數學表達式

image.png

image.png

條件判斷

常見的條件:

  • 變量屬性;

image.png
image.png
image.png

  • 文件屬性;

image.png

  • 命令執行結果;
  • 多種條件的邏輯組合;
    判斷結果的一般定義:
  • 真:0
  • 假:1
    格式:
  • test condition
  • [ condition ] #[右邊和]左邊需要有空格

控制結構

常見分支結構:

  • if
#!/bin/bash
echo -n "Please input a directory:”
read dir
if cd ${dir} > /dev/null 2>&1;then
echo "enter directory $dir successed”
else
echo "enter directory $dir failed”
fi

Linux系統里執行的每一個程序都有標準輸入/標準輸出/錯誤輸出三個通道。
Linux所有的設備都是以文件的形式出現,因此,這里提到的三個通道,實際上就是三個文件。

  • 文件描述符 0 : 標準輸入
  • 文件描述符 1 : 標準輸出
  • 文件描述符 2 : 錯誤輸出

find / -name "cd" 1> stdout.txt 2> errout.txt

&:取地址

> /dev/null 等價于1>/dev/null把標準輸出的內容輸出到垃圾箱

2 > &1 把錯誤輸出的內容輸出到標準輸出的地址

  • case
    image.png
    模式的匹配可以使用通配符
  • ?:僅匹配一個字符
  • *:匹配任意字符
  • […]:配置方括號中的任意一個字符
  • [!..] : 不匹配方括號中的任意字符
  • [a-zA-Z] : -指定一個取值范圍

常見循環結構:

  • for
#!/bin/bash
echo "Input a directory:”
read dir
for file in `ls $dir`
do
echo $file
done
  • while
  • until

image.png

image.png
image.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/390703.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/390703.shtml
英文地址,請注明出處:http://en.pswp.cn/news/390703.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Leetcode之javascript解題(No33-34)

附上我的github倉庫,會不斷更新leetcode解題答案,提供一個思路,大家共勉 在我的主頁和github上可以看到更多的關于leetcode的解題報告!(因為不知道為什么掘金沒有將其發布出來,目前已經聯系掘金客服&#x…

真實感人故事_您的數據可以告訴您真實故事嗎?

真實感人故事Many are passionate about Data Analytics. Many love matplotlib and Seaborn. Many enjoy designing and working on Classifiers. We are quick to grab a data set and launch Jupyter Notebook, import pandas and NumPy and get to work. But wait a minute…

轉:防止跨站攻擊,安全過濾

轉:http://blog.csdn.net/zpf0918/article/details/43952511 Spring MVC防御CSRF、XSS和SQL注入攻擊 本文說一下SpringMVC如何防御CSRF(Cross-site request forgery跨站請求偽造)和XSS(Cross site script跨站腳本攻擊)。 說說CSRF 對CSRF來說,其實Spring…

Linux c編程

c語言標準 ANSI CPOSIX(提高UNIX程序可移植性)SVID(POSIX的擴展超集)XPG(X/Open可移植性指南)GNU C(唯一能編譯Linux內核的編譯器) gcc 簡介 名稱: GNU project C an…

html怎么注釋掉代碼_HTML注釋:如何注釋掉您HTML代碼

html怎么注釋掉代碼HTML中的注釋 (Comments in HTML) The comment tag is an element used to leave notes, mostly related to the project or the website. This tag is frequently used to explain something in the code or leave some recommendations about the project.…

k均值算法 二分k均值算法_使用K均值對加勒比珊瑚礁進行分類

k均值算法 二分k均值算法Have you ever seen a Caribbean reef? Well if you haven’t, prepare yourself.您見過加勒比礁嗎? 好吧,如果沒有,請做好準備。 Today, we will be answering a question that, at face value, appears quite sim…

您好,這是我的第一篇文章

您好我是CYL 這是一個辣雞博客 歡迎指教 轉載于:https://www.cnblogs.com/pigba/p/8823472.html

08_MySQL DQL_SQL99標準中的多表查詢(內連接)

# sql99語法/*語法: select 查詢列表 from 表1 別名 【連接類型】 join 表2 別名 on 連接條件 【where 篩選條件】 【group by 分組】 【having 分組后篩選】 【order by 排序列表】分類內連接(重點): inner外連接 左外&#xff0…

java中抽象類繼承抽象類_Java中的抽象類用示例解釋

java中抽象類繼承抽象類Abstract classes are classes declared with abstract. They can be subclassed or extended, but cannot be instantiated. You can think of them as a class version of interfaces, or as an interface with actual code attached to the methods.抽…

新建VUX項目

使用Vue-cli安裝Vux2 特別注意配置vux-loader。來自為知筆記(Wiz)

衡量試卷難度信度_我們可以通過數字來衡量語言難度嗎?

衡量試卷難度信度Without a doubt, the world is “growing smaller” in terms of our access to people and content from other countries and cultures. Even the COVID-19 pandemic, which has curtailed international travel, has led to increasing virtual interactio…

Linux 題目總結

守護進程的工作就是打開一個端口,并且等待(Listen)進入連接。 如果客戶端發起一個連接請求,守護進程就創建(Fork)一個子進程響應這個連接,而主進程繼續監聽其他的服務請求。 xinetd能夠同時監聽…

《精通Spring4.X企業應用開發實戰》讀后感第二章

一、配置Maven\tomcat https://www.cnblogs.com/Miracle-Maker/articles/6476687.html https://www.cnblogs.com/Knowledge-has-no-limit/p/7240585.html 二、創建數據庫表 DROP DATABASE IF EXISTS sampledb; CREATE DATABASE sampledb DEFAULT CHARACTER SET utf8; USE sampl…

換了電腦如何使用hexo繼續寫博客

前言 我們知道,使用 Githubhexo 搭建一個個人博客確實需要花不少時間的,我們搭好博客后使用的挺好,但是如果我們有一天電腦突然壞了,或者換了系統,那么我們怎么使用 hexo 再發布文章到個人博客呢? 如果我們…

leetcode 525. 連續數組

給定一個二進制數組 nums , 找到含有相同數量的 0 和 1 的最長連續子數組,并返回該子數組的長度。 示例 1: 輸入: nums [0,1] 輸出: 2 說明: [0, 1] 是具有相同數量 0 和 1 的最長連續子數組。 示例 2: 輸入: nums [0,1,0] 輸出: 2 說明: [0, 1] (或 [1, 0]) 是…

實踐作業2:黑盒測試實踐(小組作業)每日任務記錄1

會議時間:2017年11月24日20:00 – 20:30 會議地點:在線討論 主 持 人:王晨懿 參會人員:王晨懿、余晨晨、鄭錦波、楊瀟、侯歡、汪元 記 錄 人:楊瀟 會議議題:軟件測試課程作業-黑盒測試實踐的啟動計劃 會議內…

視圖可視化 后臺_如何在單視圖中可視化復雜的多層主題

視圖可視化 后臺Sometimes a dataset can tell many stories. Trying to show them all in a single visualization is great, but can be too much of a good thing. How do you avoid information overload without oversimplification?有時數據集可以講述許多故事。 試圖在…

iam身份驗證以及訪問控制_如何將受限訪問IAM用戶添加到EKS群集

iam身份驗證以及訪問控制介紹 (Introduction) Elastic Kubernetes Service (EKS) is the fully managed Kubernetes service from AWS. It is deeply integrated with many AWS services, such as AWS Identity and Access Management (IAM) (for authentication to the cluste…

一步一步構建自己的管理系統①

2019獨角獸企業重金招聘Python工程師標準>>> 系統肯定要先選一個基礎框架。 還算比較熟悉Spring. 就選Spring boot postgres mybatis. 前端用Angular. 開始搭開發環境,開在window上整的。 到時候再放到服務器上。 自己也去整了個小服務器,…

面向對象面向過程

1、面向語句: 直接寫原生的sql語句,但是這樣代碼不容易維護。改一個方法會導致整個項目都要改動, 2、面向過程 定義一些函數,用的時候就調用不用就不調用。但是這也有解決不了的問題,如果要維護需要改動代碼&#xff0…