bash shell 檔案語法解讀與總結
1. bash基本語法
下面看一個簡單的shell檔案(HelloWorld.sh):
#!/bin/bash
#This is an example
echo Hello World
(1)“#!”是說明這個檔案型別的,Linux系統根據“#!”及其後面的字串確定該檔案的型別,/bin/bash表名該檔案是一個bash程式,需要由/bin目錄下的bash程式來解釋執行。 (2)“#”是bash檔案的註釋;echo是回顯命令(標準輸出;Bash程式中絕大部分語句結束時沒有分號。 (3)執行bash程式:sh HelloWorld.sh 或者./HelloWorld.sh(需要有可執行許可權)。 bash shell檔案標頭檔案常見有: 1 #!/bin/sh 2 #!/bin/bash 3 #!/usr/bin/perl 4 #!/usr/bin/tcl 5 #!/bin/sed -f 6 #!/usr/awk -f
2. bash變數
注:bash中的變數是不能含有保留字,不能含有“-”等保留字元,也不能含有空格。
在bash中,變數是不需要提前定義的,一般使用變數的第一條語句是賦初值,若不賦初值,預設為NULL。
例子:
#!/bin/bash
#This is an example
STR=”Hello World”
echo $STR
(1)變數賦值時,“=”號左右兩邊都不能有空格。
(2)除了變數賦值和在for語句迴圈頭中,bash*變數*在使用時都需要加“$
(4)Bash程式是在一個新的程序中執行,該程式中的變數命名,賦值和使用不會影響其他程序或者原始shell變數已存在的值(相當於C++中的區域性變數作用域?)
(5)以單引號括起來的變數將不再被解釋為變數,如‘
(6)bash變數沒有型別的分別,一個變數可以被定義為字串,也可以再被定為為整數,取決於變數的用途。
例子(變數的運算):
#!/bin/bash
x=1999
let "x=$x+1"
echo $x #輸出2000
x=`expr $x+1`
echo $x #輸出2000+1
x="Hello"$x
echo $x #輸出Hello2000+1
變數加減:(親測例項)x=$(( $x + 1 ))
注意首句路徑格式等要寫對;
(7)在比較操作上,整數變數和字串變數不同:
如:
比較字串變數a和b是否相等就寫作:if [
比較整數變數a和b是否相等寫作:if [
(8)除了整數和字串之外,bash變數還可以作為檔案變數操作。bash中沒有浮點數運算。
其中,file,file1,和file2代表檔案路徑
3.函式
function my_funcname {
code block
}
(1)左邊的寫法“{” 之前要有空格,否則會有錯誤:syntax error near unexpected token `echo’
(2)函式的引數並不需要在定義時就指定,只需要通過bash保留變數
(3)函式的返回值可以用return語句來制定返回一個特定的整數,如果沒有指定,則返回最後一條語句的執行結果(成功返回0,失敗返回錯誤程式碼)。函式的返回值通過“$?”保留字來獲得。BASH要求返回值必須為一個整數,不能有return語句返回字串變數。
例子:square.sh
#!/bin/bash
square(){
let "res=$1*$1"
return $res
}
square $1 #$1表示第一個實參 5
result=$?
echo $result
exit 0
執行:sh funtest.sh 5 返回:25
4. 提取檔名和目錄名
參考連結:(http://blog.csdn.net/ljianhui/article/details/43128465)
(1)使用
#:表示從左邊算起第一個
%:表示從右邊算起第一個
##:表示從左邊算起最後一個
%%:表示從右邊算起最後一個
換句話來說,#總是表示左邊算起,%總是表示右邊算起。
*:表示要刪除的內容,對於#和##的情況,它位於指定的字元(例子中的'/'和'.')的左邊,表於刪除指定字元及其左邊的內容;對於%和%%的情況,它位於指定的字元(例子中的'/'和'.')的右邊,表示刪除指定字元及其右邊的內容。這裡的'*'的位置不能互換,即不能把*號放在#或##的右邊,反之亦然。${var%%x*}表示找出從右邊算起最後一個字元x,並刪除字元x及其右邊的字元。
(2)basename和dirname
示例一
[root@web ~]# basename /usr/bin/sort
sort
[root@web ~]# dirname /usr/bin/sort
/usr/bin
[root@web ~]#
5.for迴圈
#這是一個基本的迴圈結構. 它與C語言中的for迴圈結構有很大的不同.
[html] view plain copy
for arg in [list]
do
command(s)...
done
#在迴圈的每次執行中, arg將順序的訪問list中列出的變數.
for arg in "$var1" "$var2" "$var3" ... "$varN"
# 在第1次迴圈中, arg = $var1
# 在第2次迴圈中, arg = $var2
# 在第3次迴圈中, arg = $var3
# 在第N此迴圈中, arg = $varN
# 在[list]中的引數加上雙引號是為了阻止單詞分割.
注:list中的引數允許包含萬用字元,如果do和for想在同一行中出現, 那麼在它們之間需要新增一個分號.
for arg in [list] ; do
#!/bin/bash
for planet in Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune Pluto
do
echo $planet
done
echo "---------------------------------------------------"
for planet in "Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune Pluto"
do
echo $planet
done
exit 0
結果:
root@ubuntu:~/resource/0510# ./test1
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune
Pluto
---------------------------------------------------
Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune Pluto
root@ubuntu:~/resource/0510#
每個[list]中的元素都可能包含多個引數. 在處理引數組時, 使用set命令來強制解析每個[list]中的元素, 並且將每個解析出來的部分都分配到一個位置引數中.
#!/bin/bash
for planet in "Mercury 36" "Venus 67" "Earth 93" "Mars 142" "Jupiter 483"
do
set -- $planet
echo "$1 $2,000,000 miles from the sun"
done
exit 0
結果:
root@ubuntu:~/resource/0510# ./test1
Mercury 36,000,000 miles from the sun
Venus 67,000,000 miles from the sun
Earth 93,000,000 miles from the sun
Mars 142,000,000 miles from the sun
Jupiter 483,000,000 miles from the sun
root@ubuntu:~/resource/0510#
6.cat命令使用
cat主要有三大功能:
1.一次顯示整個檔案。
只能建立新檔案,不能編輯已有檔案.
3.將幾個檔案合併為一個檔案: $cat file1 file2 > file
引數:
-n 或 –number 由 1 開始對所有輸出的行數編號
-b 或 –number-nonblank 和 -n 相似,只不過對於空白行不編號
-s 或 –squeeze-blank 當遇到有連續兩行以上的空白行,就代換為一行的空白行
-v 或 –show-nonprinting
例:
#把 textfile1 的檔案內容加上行號後輸入 textfile2 這個檔案裡
cat -n textfile1 > textfile2
#把 textfile1 和 textfile2 的檔案內容加上行號(空白行不加)之後將內容附加到 textfile3 裡。
cat -b textfile1 textfile2 >> textfile3
相關推薦
bash shell 檔案語法解讀與總結
1. bash基本語法 下面看一個簡單的shell檔案(HelloWorld.sh): #!/bin/bash #This is an example echo Hello World (1)“#!”是
bash shell數值比較(-eq)與字符比較(==)的區別
整數比較 ron shell 時間 導致 erro opera 10.10 在線 運維中經常編寫腳本時,如果遇到使用變量間歇取值並和整數進行比較時,大多數人第一時間會想到使用"-eq"進行比較,但事實中如果因特殊原因導致變量取值為空(null)時,bas
XtraBackup全備工作流程解讀與總結
備份 XtraBackup 背景 出於對XtraBackup工作原理好奇,做了下面的日誌解讀 工作流程解讀 [root@node1 09:23:35 /root] #time innobackupex --defaults-file=/data/mysql/mysql3306/my3306.cnf -
ORB-SLAM2論文解讀與總結
最近閱讀了Raúl Mur-Artal and Juan D. Tardós寫的ORB_SLAM2論文,並做了一些小結ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras本人
bash shell最基本的語法
ssi expr express 一個空格 元素 res 空格 pre file 1 shell語句的基本構成 shell每個基本的構成元素之間都相隔一個空格。 比如[ -e file ],[、-e、file、]這四個基本元素之間都相隔了一個空格。 同樣的道理[ ! -e
bash Shell 總結《二》
ja1. 命令的退出狀態 (1), (kw: EXIT STATUS) 每一個命令都有一個退出狀態,用一個非負的整數表示 狀態碼0 表示命令運行沒有出錯 非零狀態碼表示命令出錯 狀態碼的範圍是0-255 命令的退出狀態常用於流程控制結構中的條件判斷2. 條件表達式 (2), (k
bash Shell 總結《四》 正則表達式
ja正則表達式單個字符表示法字符本身 <-- 除了下面的特殊字符之外,字符可以表示其本身. <-- Any character\d <-- Digit in 0123456789\D <--
bash shell 中時間操作常用方法總結
hour day 當前時間 簡單的 之前 nbsp seconds 獲取 相互 在日常的工作中,bash shell 的時間操作非常頻繁。比如shell腳本定時發送數據統計的時候,會查看當前是否為預定的發送時間。或者使用文件保存一些數據時,一般會生成時間字符串當做文
【OpenPose】1.OpenPoseDemo檔案的使用與解讀
OpenPose是基於深度學習的姿勢估計開源框架。 它的原始碼託管在github上:OpenPose的連結 下載、安裝可以參考官方文件,Visual Studio2017、CUDA9的安裝方法可以參考國內某些部落格【OpenPose-W
《Linux命令列與shell指令碼程式設計大全》讀書筆記————第三章 基本的bash shell命令
本章內容 1、使用shell 2、bash手冊 3、瀏覽檔案系統 4、檔案和目錄列表 5、管理檔案和目錄 6、檢視檔案內容 3.3 bash手冊 命令: man xterm 作用:檢視檢視xterm使用者手冊 man命
bash shell關聯陣列總結
【原創】本博文為原創博文,引用或轉發請註明原始出處和連結:https://www.cnblogs.com/dingbj/p/dict_array.html 什麼是關聯陣列? 關聯陣列相對於索引陣列,又稱字典,這裡我就不給具體定義了,可以百度。 通過對比普通索引陣列,能夠快速理解運
使用Bash Shell檢查檔案是否存在的方法
前言 大家在工作的時候可能經常會遇到這樣的需求,在類Unix系統的Bash環境下,怎樣檢查檔案是否存在呢?既然有需求,當然就有解決的辦法了,Shell中的test命令,可以用來檢測檔案的型別或者比較數值是否相等,該命令也能用來檢查檔案是否存在。 可以用如下的命令來
Linux shell指令碼開頭#!/bin/bash和#!/bin/sh介紹與區別
一直以為在Linux shell指令碼中#都是代表著註釋功能,同樣在指令碼開始的#!/bin/sh也只是告訴使用者這是一個shell指令碼,最近查了下,才發現不是這個意思,分享下。 一、意思 #!/bin/sh是指此指令碼使用/bin/sh來解釋執行,#!是特殊的表示符,其後面跟的是此解釋此指令碼的she
Linux 下用bash shell正則表示式批量處理檔案的應用例項
程式碼檔案頭有版本資訊,下面一段shell指令碼就是用來收索和更新程式碼頭註釋裡面的斑斑資訊的。 從中可以到shell指令碼中以下幾個小技術點是如何運用的: 1. 利用正則表示式分組匹配指定內容 2. 字串的定位,截斷和拼接處理 3. 指定檔案指定行替換指定內容 #!/bi
shell指令碼常用命令與方法總結
工作中shell指令碼,經常用的語法,整理了下 1 echo帶色的 列印字串帶色(31紅色,32綠色,33黃色,34藍色) 列印字串背景帶色 (40黑色,41紅色,42綠色,黃色43,藍色44,白色47) echo -e “\
Bash Shell 備份特定目錄下的txt檔案
d=`date +%Y%m%d`source_dir=/root backup_path=/tmp/ for i in `find $source_dir -maxdepth 1 -type f |grep ".txt$"` do
Shell_Linux bash shell 逐行讀取檔案的三種方法
方法一,指定換行符讀取: #! /bin/bash IFS=" " for LINE in `cat /etc/passwd` do echo $LINE d
java web學習心得與總結(1)——jsp基本語法
java web自學快三個月了,前面的基礎知識都忘了,以後每天寫一篇部落格總結一下. 或者關注下我的新浪微博:Mr翅膀君 一.page指令 1.language屬性 <%@ page language="java" import="java.util.*" page
Linux Bash Shell 載入檔案
bash shell可分為3種類型: 1 login shell:需要輸入使用者名稱和密碼才能登陸的shell 2 可互動的非login shell:不用登陸,但可以同用戶進行互動的shell,比如在父shell當中執行bash命令產生的子shell 3 不可互動的非login shell:
可執行檔案的裝載與程序的一點小總結 《程式設計師的自我修養》·筆記
可執行檔案的裝載與程序小結 程序的虛擬地址空間 每個程式被執行起來之後都擁有自己獨立的虛擬地址空間,這個虛擬地址空間的大小是CPU的位數決定的。比如,32位的硬體平臺決定了虛擬地址空間的地址為