Linux基礎五(shell指令碼)
文章目錄
一、shell
- 是一個用 C 語言編寫的程式,它是使用者使用 Linux 的橋樑。Shell 既是一種命令語言,又是一種程式設計語言
二、編寫shell指令碼
- 新增註解:
檔案頭部為#!/bin/bash或#!/bin/sh或不寫,建議寫上 - 執行方式
1.sh shell指令碼 例如:sh hello.sh
2.bash shell指令碼 例如:bash hello.sh
3.修改許可權為可執行的,然後./shell指令碼(預設是bash) 例如:./hello.sh
1)普通shell指令碼
編寫指令碼
新增註釋,和文字
執行指令碼
2)含變數的指令碼
-
變數不需要宣告,初始化不需要指定型別,變數可以動態轉換
-
變數命名:
- 1:只能使用數字,字母和下劃線,且不能以數字開頭
- 2:變數名區分大小寫
- 3:建議變數的名稱要通俗易懂
-
賦值:變數賦值是通過等號(=)進行賦值,在變數、等號和值之間不能出現空格。
-
輸出:加上$變數名,也可以使用 ${變數名}
編寫指令碼
加上{}後面可以接著給值
執行指令碼
echo $x
echo &{x}這是一個變數
修改變數,不能 ${x}=xx 只能採取以新的變數重新賦值
3)傳參,位置變數
指令碼中使用位置變數 ($數字) 來進行佔位 等待引數的傳遞
格式:$數字 獲取某一個位置上的值
$# 獲取引數的個數,不包括指令碼名
$* 獲取引數的值
注意:把指令碼名稱的$0的引數忽略不計
注意:從0開始接收,接收不到就不顯示,可以跳著接收,
$0永遠都是指令碼名稱
$數字:數字大於一位數時,需要加上邊界{}
4)字串
在/etc/profile中自定義的變數,在哪裡都能使用
可以看到以字串輸出,並沒有輸出變數的值,要想輸出變數的值,需加上個引用$
- 單引號:內容按原字串進行輸出
不能使用轉義符 - 雙引號:可以引用變數
可以使用轉義符 - 沒引號:可以引用變數
可以使用轉義符
單引號報錯
更改
1.拼接和字串的長度
拼接:直接引用多個變數
例如:x=${name}${age}
字串的長度:
格式:${#變數名}
2.字串的擷取
格式:${變數名:開始位置:擷取長度}
3.字串的替換
替換第一個出現的字串格式:${變數名/原字串內容/新字串內容}
替換所有格式:${變數名//原字串內容/新字串內容}
注意:替換不會在原字串上修改
4.字串的刪除
會生成一個新的字串,不會在原字串上發生修改
#:從頭開始刪除(匹配第一個)
格式:${變數名#條件}
例如:${str#*,}:刪除第一個逗號之前包括逗號的所有內容
##:從頭開始刪除(匹配最後一個)
格式:${變數名##條件}
例如:${str##*,}:刪除最後一個逗號之前包括逗號的所有內容
%:從尾開始刪除(匹配第一個)
格式:${變數名%條件}
例如:${str%,*}:刪除第一個逗號之前包括逗號的所有內容
%%:從尾開始刪除(匹配最後一個)
格式:${變數名%%條件}
例如:${str%%,*}:刪除最後一個逗號之前包括逗號的所有內容
5)陣列
儲存多個元素
格式:變數名=(元素1 元素2....元素n)
操作:${變數名[下標]}
注意:${list}直接輸出變數名,結果就是下標為0的值
${list[*]} 獲取所有的元素
獲取個數:
${#變數名[*]}
引用陣列,如果不指定下標,預設輸出小標為零的元素
6)基本運算子
算術運算子
注意表示式中各數和運算子之間要加空格隔開
方式1:通過expr這個表示式計算工具
格式:`expr 表示式`
注意:表示式中運算子兩變需要加空格
方式2:通過[]
格式:$[表示式]
支援加減除,不支援*
支援加減乘除
比較運算子:
格式:[值1 符號 值2]
注意:使用[]時,符號兩端加不加空格都行,[]兩端加不加都行,不能使用字母(-gt)
比較等於時,使用==
直接引用結果 0表示false 1表示true
7)if語句
- 判斷條件:四種
- 1.使用test進行判斷,用於檢測結果是否正確
- 2.使用[],符號和符號表示式都可以使用,如果使用的是符號需要加上轉義符
注意:符號和[]兩邊需要加空格 - 3.使用[[]],符號和符號表示式都可以使用
注意:符號和[]兩邊需要加空格 - 4.使用(()),只能使用符號
注意:符號和()兩邊不需要加空格
判斷方法一
判斷方法二
判斷方法三
判斷方法四
格式1:if 判斷條件
then
執行語句
fi
格式2:
if 判斷條件
then
執行語句
else
執行語句
fi
格式3:
if 判斷條件
then
執行語句
elif 判斷條件
then
執行語句
fi
如果有兩個判斷條件
格式:((判斷條件 & 判斷條件))
((((判斷條件)) & ((判斷條件))))
8)鍵盤錄入read
格式1:read 變數
格式2:read 變數1 變數2
注意:使用格式2時,鍵盤錄入的需要以空格進行切分
echo輸出預設換行,不換行寫法 echo -n 輸出結果
9)for迴圈
for迴圈:
格式1:for ((初始化變數;判斷條件;控制語句))
do
執行語句
done
例如:for ((i=1;i<=100;i++))
do
echo ${i}
done
格式2:for 變數 in 結果集
do
執行語句
done
例如:for i in {1..100}
do
echo ${i}
done
案例:求1到100的奇數和和偶數和
{開始..結束}:表示開始位置到結束位置所有的數字
注意:
累加的操作:osum=`expr ${i} + ${osum}`
osum=$[${i}+${osum}]
let osum+=i
使用let之後 在引用變數進行計算時,不需要在使用$,+=是進行計算不再是拼接
案例:列印5*5的三角形
10)函式
方法定義:函式名稱(){
方法體
}
方法呼叫:直接使用方法名稱
引數傳遞:通過$數字,來進行接收,$0永遠是指令碼名稱,方法呼叫時傳遞引數
返回值:return
接收返回值:$?
注意:return只能return數字 $?接收當前執行的狀態,只接收一次
帶參函式,在函式名後面傳參,有返回值,只接受一次
帶參函式,在執行指令碼後面傳參
無參無返回值
11)日期,定時器
獲取當前日期時間,字母大小寫必須嚴格和下面一樣,模板可以不一樣
date +"%Y-%m-%d %H:%M:%S"
加減日期時間
date +%Y%m%d //顯示前天年月日
date +%Y%m%d --date="+1 day" //顯示前一天的日期
date +%Y%m%d --date="-1 day" //顯示後一天的日期
date +%Y%m%d --date="-1 month" //顯示上一月的日期
date +%Y%m%d --date="+1 month" //顯示下一月的日期
date +%Y%m%d --date="-1 year" //顯示前一年的日期
date +%Y%m%d --date="+1 year" //顯示下一年的日期
12)重定向
重定向:每輸入一個命令都會開啟三個檔案
標準輸入檔案(stdin):stdin的檔案描述符為0,預設從stdin讀取資料。
標準輸出檔案(stdout):stdout 的檔案描述符為1,預設向stdout輸出資料。
標準錯誤檔案(stderr):stderr的檔案描述符為2,向stderr流中寫入錯誤資訊
重定向時,預設不會把檔案描述符為2,寫入到檔案中,想要寫入
需要:ll data.txt data1.txt 2>test.txt
data.txt存在 data1.txt不存在的
ls: 無法訪問data1.txt: 沒有那個檔案或目錄 ---------------2
-rw-r--r--. 1 root root 6 9月 17 14:09 data.txt-------1
如果想要把1和2都重定向到檔案中
需要:ll data.txt data1.txt >test.txt 2>&1
xx > yy xx 是要寫入的內容,yy是要寫入的檔案
當前目錄下有一個檔案,檔案中的內容為hello
預設將正確資訊寫入新檔案中
要想錯誤的寫入,需加個2
>和>>的區別,>> 是追加 > 是覆蓋
想把錯誤的和正確的都寫入
直接將字串追加到檔案中
13)定時器
建立定時任務:crontab -e
執行該指令會開啟一個檔案,在該檔案中寫定時任務
注意裡面的檔案要加絕對路徑
前面為定時的時間
第一個* 代表分鐘 取值範圍0~59
第二個* 代表小時 取值範圍0~23
第三個* 代表日期 取值範圍1~31
第四個* 代表月份 取值範圍1~12
第五個* 代表星期幾 取值範圍0~6 代表星期日
* * * * * 預設為一分鐘執行一次
*/5* * * * 每5分鐘執行一次
0 * * * *分鐘每到零的時候執行一次,即每小時執行一次
0 0 * * *每個0點0分執行一次,即每天執行一次
0 0 * * 0每週執行一次
0 0 1 * *每月執行一次
=====================================
0 */2 * * * 每兩小時執行一次
0 23-7/2,8 * * * 晚上11點到早上8點,每兩小時執行一次
0 11 * * 1-3星期一到星期三的11點執行一次
檢視定時任務的日誌: tail -f /var/log/cron
演示
由於定時執行的命令可能會很長,此處可以編寫shell指令碼,直接在定時器中加上執行指令碼的指令就可
建立一個指令碼
將指令碼寫入定時器,實現每分鐘執行一次
檢視定時器日誌
可以看到每隔一分鐘多了一條日誌
檢視data看看定時任務有沒有執行成功
注意:定時器的任務,不用的要及時清了,或者註釋掉,或者每次都會執行,直至磁碟寫滿
清除後再檢視日誌,可以看到日誌不再執行定時任務
java
java入門基礎學習(一)
java入門基礎學習(二)
java入門基礎學習(三)
java入門基礎學習(四)
java入門基礎學習(五)
java入門基礎學習(六)
java入門基礎學習(七)
java入門基礎學習(八)
java入門基礎學習(九)
java入門基礎學習(十)
java入門基礎學習(十一)
java入門基礎學習(十二)
java入門基礎學習(十三)
java入門基礎學習(十四)Maven Git
java總結,題目+筆記
java進階之常見物件(一)
java進階之常見物件(二)
java進階之氣泡排序
java進階之選擇排序
java進階之物件導向(封裝)
java進階之物件導向(程式碼塊、繼承)
java進階之物件導向(多型、抽象、介面)
java進階之匿名內部類、訪問修飾符、包
java進階之io流(位元組流,字元流)
java應用一(反射的應用)
java應用二(配置檔案、工具類)
java應用三(資料庫索引、spring)
java應用四(連線池)
Linux
Linux基礎一
Linux基礎二
Linux基礎三
Linux基礎四
Mysql
mysql一
mysql二
mysql三
mysql四
java連線資料庫
redis
redis一(快取,redis簡介)
redis二(單節點安裝,桌面外掛)
redis三(指令的使用)
redis四(java與redis的連線,基本指令在java中的操作)
redis五(練習)
redis七(持久化)
redis九(叢集安裝)
Hadoop
hadoop學習一
hadoop學習二
hadoop學習三
hadoop學習四
hadoop學習五
hadoop學習六
hadoop學習七
hadoop學習八
hadoop異常處理
hadoop基礎學習九
hadoop基礎學習十
hadoop基礎學習十一
hadoop基礎學習十四
hadoop基礎學習十五
相關文章
- Linux shell 指令碼基礎介紹Linux指令碼
- Shell指令碼基礎指令碼
- Linux指令碼編寫基礎(五)Linux指令碼
- Linux必須掌握的shell指令碼基礎Linux指令碼
- Linux Shell指令碼程式設計-基礎1Linux指令碼程式設計
- 【Linux學習筆記29】shell指令碼基礎Linux筆記指令碼
- shell指令碼的基礎知識指令碼
- shell指令碼程式設計基礎指令碼程式設計
- Linux Bash Shell學習(七):shell程式設計基礎——執行Shell指令碼、functionLinux程式設計指令碼Function
- Linux_day06_01_Shell指令碼程式設計_Bash基礎Linux指令碼程式設計
- Shell程式設計基礎學習之五:重定向與指令碼除錯程式設計指令碼除錯
- Linux Shell指令碼Linux指令碼
- Linux shell 指令碼Linux指令碼
- Linux 指令碼編寫基礎Linux指令碼
- Linux指令碼編寫基礎Linux指令碼
- Linux shell 基礎Linux
- 為什麼要有Shell指令碼註釋?linux系統開發基礎指令碼Linux
- Linux shell 指令碼分享Linux指令碼
- Linux 指令碼編寫基礎(轉)Linux指令碼
- Linux shell基礎3Linux
- Linux shell基礎1Linux
- Linux shell基礎2Linux
- Linux shell基礎(一)Linux
- 《Linux命令列與shell指令碼程式設計大全》第五章理解shellLinux命令列指令碼程式設計
- linux shell小指令碼分享Linux指令碼
- linux常用的shell指令碼Linux指令碼
- Linux/Unix shell 指令碼中呼叫SQL,RMAN指令碼Linux指令碼SQL
- Linux學習(Shell基礎)Linux
- Linux基礎指令(2)Linux
- Linux 【Shell指令碼經典案例】Linux指令碼
- 【Linux】【Shell】主控指令碼實現Linux指令碼
- linux shell 指令碼攻略筆記Linux指令碼筆記
- Linux Shell指令碼系列之二Linux指令碼
- Linux Shell指令碼系列之一Linux指令碼
- Linux Shell 指令碼面試 25 問Linux指令碼面試
- Linux Shell指令碼面試25問Linux指令碼面試
- linux shell指令碼中 =~ 的作用Linux指令碼
- Linux基礎服務巡檢指令碼模板Linux指令碼