Shell程式設計以及一些概念

2021-10-09 12:39:43 字數 4109 閱讀 8851

shell解析器:解析shell指令碼,檢視:

cat /etc/shells
centos預設的解析器是**bash**,列印系統預設的shell解析器

echo

$shell

①、shell是什麼
是命令,類似windows的dos命令;

又是一門程式語言,裡面含有變數、函式、邏輯控制語句等

②、shell指令碼是什麼
shell指令碼是乙個文字檔案,裡面可以編寫shell命令或進行程式設計,形成乙個可重用執行的指令碼檔案

③、shell指令碼的作用
通過shell程式設計提高對linux系統的管理工作效率

④、linux系統預設的shell解析器
/bin/bash

①、shell指令碼編寫規範

②、shell指令碼helloworld

編寫helloworld指令碼檔案

touch helloworld.sh

vim helloworld.sh

a進入編輯模式,helloworld.sh內容如下

#!/bin/bash

echo

"hello,world"

:wq儲存

執行指令碼檔案helloworld.sh

三種執行方式的區別

sh或bash執行通過直接使用shell解析器執行,不需要指令碼檔案具有可執行許可權;

僅路徑方式自我執行指令碼檔案,需要可執行許可權

需求:

已知目錄/root/feng目錄,執行batch.sh指令碼,實現在/root/feng/目錄下建立乙個one.txt檔案,在one.txt檔案中增加內容"hello, shell"。

實現:

# 建立feng目錄

mkdir feng

vim batch.sh

batch.sh內容:

#!/bin/bash

touch /root/feng/one.txt

echo

"hello, shell"

>> /root/feng/one.txt

輸出字串資料到檔案:echo "字串" >> 檔案

# 執行batch.sh

sh batch.sh

# 檢視one.txt檔案是否生成

ls -l /root/feng/

# 檢視one.txt檔案內容

cat /root/feng/one.txt

①、 系統環境變數是什麼?

是系統提供的環境變數,通重載入shell配置檔案中的變數資料,共享給shell程式使用

②、環境變數的分類

③、env和set的區別

④、常用的環境變數

變數名稱

含義path

存放命令的目錄路徑,與windows的環境變數path一樣

lang

查詢系統的字符集

histfilf

查詢當前使用者的歷史執行命令列表

① 自定義區域性變數

定義自定義區域性變數

var_name=value # 注意=前後不要有空格
使用自定義區域性變數

# 直接使用

echo

$var_name

# 字串拼接使用

echo my name is $123

刪除自定義區域性變數

unset $var_name

② 自定義常量(唯讀變數)

定義唯讀變數:(不可修改值)

readonly var_name

③ 自定義全域性變數

父子shell環境:

有兩個shell指令碼檔案a.sh和b.sh

在a.sh中執行了b.sh的指令碼檔案,就稱a.sh為父shell環境,b.sh為子shell環境。

自定義全域性變數:

在父shell環境中定義全域性變數,子shell環境也能使用

自定義全域性變數語法:

export var_name1 var_name2
案例:

建立2個指令碼檔案demo1.sh和demo2.sh

編輯demo1.sh

編輯demo2.sh

執行demo2.s**件

#1. 建立2個指令碼檔案demo1.sh和demo2.sh

touch demo1.sh demo2.sh

#2. 編輯demo1.sh

vim demo1.sh

demo1.sh內容

#!/bin/bash

#- 命令1:定義全域性變數var_name

export var_name=

"go spurs go"

sh demo2.sh

demo2.sh內容

#!/bin/bash

#- 輸出全域性變數var_name

echo

$var_name

執行demo1.sh:sh demo1.sh

④ 自定義變數總結

1、定義和修改:var_name=value

2、查詢或使用:$$var_name

3、刪除:unset varname

$n

$1~$9:代表第1個到第9個輸入引數

$:代表第10個及以上的輸入引數

$*$@的區別:

執行指令碼檔案傳入引數

sh 指令碼檔案 引數1 引數2 ···
迴圈語法:

for var_name in 列表變數

do# 迴圈開始

echo

$var_name

# 迴圈體

done

# 迴圈結束

需求:

建立demo.sh, 列印指令碼檔案名字,第乙個引數,第二個引數,第十個引數,所有引數個數,所有輸入引數、逐行列印引數。

實現:

#!/bin/bash

# 列印指令碼名字

echo 列印指令碼名字:$0

# 列印第乙個引數

echo 列印第乙個引數:$1

# 列印第二個引數

echo 列印第二個引數:$2

# 列印第十個引數

echo 列印第十個引數(不帶花括號):$10

echo 列印第十個引數(帶花括號):$

# 列印所有引數個數

echo 列印所有引數個數:$#

# 列印所有輸入引數

echo 列印所有輸入引數:"$*"

# 遍歷引數列表

echo 遍歷引數列表:

for item in

"$@"

doecho

$item

done

shell指令碼的一些程式設計

shell的一般結構主要是函式和主過程。shell指令碼的形式是函式放在最前面,後面是命令語句。讀取的時候是從上往下,跳過函式先執行命令語句,需要用到函式時,直接呼叫。變數分為區域性變數,環境變數 內部變數。區域性是在這個shell裡面變數,在另外乙個shell裡面不可用。環境是所有得終端都可用的。...

函式式程式設計一些概念理解

其實學習一種新的正規化是困難的 我們必須學會為熟悉的問題找到新的解答方法。函式式程式設計將程式描述為表示式和切換,以數學方程的形式建立模型,並且盡量避免可變的狀態。閉包閉包 closure 是所有函式式語言都具備的一項平常特性,可是相關的論述卻常常充斥著晦澀乃至神秘的字眼。所謂閉包,實際上是一種特殊...

shell程式設計的一些例子4

bash支援一維陣列 1.陣列定義 name value1,value2.valuen value形如 subscript string subscript 是可選項 如果沒給出 則其下標是上乙個元素的下標加1 例子 name sum scan 6 haha dfg echo sum echo sc...