Batch pk Shell - WindowsBatch與LinuxShell比較 [變量符號和關鍵字]

 

原文地址:WindowsBatch與LinuxShell比較[變量符號和關鍵字]html

 

一 簡單實例
1)batch fileshell

@echo off

rem output helloworld
::  output helloworld
Echo Hello World!

小結:
- batch file通常以bat或cmd爲後綴。
- 第一行爲@echo off表示關閉運行時batch file自己輸入,只輸出運行的結果。
- rem和::表示註釋。

2)shell filewindows

#!/bin/sh

# output helloworld
echo helloworld!

小結:
-shell file通常以sh,ksh,bash等結尾。
-第一行爲#!/bin/sh用來用那種shell解釋程序來解釋本shell腳本,由於shell有多種,常見的有sh,ksh,tsh,bash等。
-#用來在shell中表示註釋。
-shell file執行前須要修改權限爲可執行,例如:chmod a+x shellfile.sh。

二 變量
1)batch filebash

Set Name = Value
Set path = Name;%PATH%
Echo %path%

小結:
-用set來定義變量,=兩邊不能夠使用空格。
-變量間用;隔開。
-使用%%來使用變量的值。

2) shell filepost

Name=Value
PATH=Name:$PATH
Echo $PATH

小結:
-變量直接定義,且=兩邊不能有空格。
-變量間用:隔開。
-使用$來使用變量的值。

三 特殊變量

小結:
-能夠使用shift來使用超過10個變量。
-windows的batchfiles中%~dp0%表示當前文件的目錄。this



四 變量的特殊用法
變量的替換:
1)batch filelua

%VariableName:ReplacementString=OriginalString%
set a=belcome to CMD borld!
set temp=%a:b=w%
echo %temp%
pause
將顯示 welcome to CMD world! 即用w替換了變量a中的b。

2)shell filespa

${VAR/PATTERN/STRING} or ${VAR//PATTERN/STRING}  語法。
  第一種形式僅僅替換第一個匹配的項目,第二個用 STRING 替換全部匹配 PATTERN 的項目。


變量求子串:
1)batch file.net

複製代碼
%VariableName:~StartPosition,Length%
set a=superhero 
set temp=%a:~0,-3% 
echo %temp% 
pause 
將顯示superh 即顯示了變量a的第0位和第-3位中間包含的全部字符。
複製代碼

2) shell file3d

${varname:offset:length} Purpose: Returning parts of a string (substrings or slices).
STRING="thisisaverylongname" 
echo ${STRING:6:5} 


shell file中的其餘的特殊用法:

a. 變量=${參數-word}:若是設置了參數,則用參數的值置換變量的值,不然用word置換。即這種變量的值等於某一個參數的值,若是該參數沒有設置,則變量就等於word的值。
b. 變量=${參數=word}:若是設置了參數,則用參數的值置換變量的值,不然把變量設置成word,而後再用word替換參數的值。注意,位置參數不能用於這種方式,由於在Shell程序中不能爲位置參數賦值。
c. 變量=${參數?word}:若是設置了參數,則用參數的值置換變量的值,不然就顯示word並從Shell中退出,若是省略了word,則顯示標準信息。這種變量要求必定等於某一個參數的值。若是該參數沒有設置,就顯示一個信息,而後退出,所以這種方式經常使用於出錯指示。
d. 變量=${參數+word}:若是設置了參數,則用word置換變量,不然不進行置換。


五 Call/start/source/sh
1)batch file中call/start
call, 父bat中的vars能夠在子bat中訪問,且子bat的修改能夠返回到父bat中,或者若是子bat中新定義的vars也能夠帶回到父中。(由於最後子bat和父bat在執行時被合併爲同一個bat)。
Start,父bat中的vars能夠在子bat中訪問,可是子bat修改不會被反映到父bat中,且子中定義的變量不會被帶到父中。(子bat和父bat是獨立的進程)。

2) shell file中source/sh/.
Source同.命令,與batch file中的call相同,父shell中的vars能夠在子shell中訪問,且子shell的修改能夠返回到父shell中,或者若是子shell中新定義的vars也能夠帶回到父中。(由於最後子shell和父shell在執行時被合併爲同一個shell)。
Sh,同batch file的start,可是有區別,父shell中的vars不能被在子中訪問,且子中的修改不會被反映到父shell中,子中定義的變量不能被帶到父中。若是將父中的vars使用export導入子中,則在子中可見,可是修改仍不能被帶回父中。(子shell和父shell是獨立的進程)。

六 特殊符號

七 錯誤代碼
1) batch file
-errorlevel用來上次命令的返回值,若是爲0表示成功。
2) shell file
-$?用來表示上次命令的返回值,若是爲0表示成功。
3)2> file 表示將錯誤重定向到file,2>&1 表示將錯誤輸出重定向到與標準輸出相同。0表示標準輸入,1表示標準輸入,2表示錯誤輸出。

八 表達式計算
1)batch file

複製代碼
SET /A variable = Expression
set /a var=5+2 
set /a var=55*34 
set /a var=55/34
set /a var=55%%34
set /a var= (8+(9/3+7))*3
但set /a vat=55.1*34是錯誤的,由於批處理不支持浮點運算。

SET /A x = 1 
SET /A y = 2 
SET /A z = x + y + 3 
ECHO z
複製代碼


2)shell file

複製代碼
a=2
c=5
let b=$a*$c
echo $b

$((i++))

$((3 > 2)) 
$(( (3 > 2) || (4 <= 1) )) 

declare -i val3=12 val4=5
declare -i result2
result2=val3*val4
echo $result2
複製代碼

小結:Shell file中:1) 經常使用運算符號:++ Increment by one (prefix and postfix) — Decrement by one (prefix and postfix) + Plus - Minus * Multiplication / Division (with truncation) % Remainder ** Exponentiation[10] << Bit-shift left >> Bit-shift right & Bitwise and | Bitwise or ~ Bitwise not ! Logical not ^ Bitwise exclusive or, Sequential evaluation2) 字符串比較:<                     Less than >                     Greater than <=                    Less than or equal to >=                    Greater than or equal to ==                    Equal to !=                    Not equal to &&                    Logical and ||                    Logical or3) 整數比較:-lt               Less than-gt               Greater than-le               Less than or equal to-ge               Greater than or equal to-eq               Equal to-ne              Not equal to九 完!

相關文章
相關標籤/搜索