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...