1. 程式人生 > 其它 >windows下的批處理bat檔案和Linux下的shell檔案的含義

windows下的批處理bat檔案和Linux下的shell檔案的含義

原文:https://www.cnblogs.com/caiguodong/p/10308255.html

shell(Linux、Solaris) bat(windows) 含義
# rem 註釋行
/【directory】/【directory】/.../【directory】/ 【disk】:\【directory】\【directory】\...\【directory】\ path
【變數】=【檔名】,LBSAM set 【變數】=【檔名】,BSAM 把檔名賦值給變數

【變數】=【設定值】

【變數】="【設定值】"

【變數】='【設定值】'

【變數】=【設定值】; export 【變數】

export 【變數】=【設定值】

set 【變數】=【設定值】 變數的賦值
unset 【變數】 set 【變數】= 變數的初始化

${【變數】}

$【變數】

%【變數】%

變數的引用

※如果變數在if語句和for迴圈中被賦值了的話,

在引用的時候需要用!【變數】!。

※如果使用!【變數】!,要新增(延遲環境變數)

setlocal enabledelayedexpansion

$【數字】

${【數字】}

%【數字】 shell/bat啟動的時候,傳入的第【數字】個引數

$1/%1 →啟動時傳入的第一個引數

【變數】=`basename $0 .sh` set 【變數】=%~n0

本shell/bat的檔名字賦值給變數

test1.sh/test.bat → 變數=test

【變數】=`dirname 【檔案】` for %%i in ("【檔案】") do (set 【變數】=%%~dpi)

取得所在檔案路徑賦值給變數

例 :

shell:

path1=`dirname /home/dir1/dir2/test.txt`

path1=/home/dir1/dir2

bat  :

for %%i in ("D:\dir1\dir2\test.txt") do (

  set path2=%%~dpi

)

path2=D:\dir1\dir2

【變數】=`basename 【檔案】` for %%i in ("【檔案】") do (set 【變數】=%%~nxi) 取得所在檔案路徑賦值給變數

例 :

shell:

filename1=`dirname /home/dir1/dir2/test.txt`

filename1=test.txt

bat  :

for %%i in ("D:\dir1\dir2\test.txt") do (

  set filename2=%%~dpi

)

filename2=test.txt

【變數】=$?  set 【變數】=%errorlevel% 上一個命令執行的結果賦值給變數
if [ 【條件】 ]; then
    【處理1】
else
    【處理2】
fi
if 【條件】 (
    【處理1】
) else (
    【處理2】
)

※shell裡面的if語句(if test 【條件】)和

(if [ 【條件】 ])意思一樣

 if [ $【變數】 -eq 【數值】 ]; then  if %【變數】% equ 【數值】 (  等於
 if [ $【變數】 -ne 【數值】 ]; then  if %【變數】% neq 【數值】 (  不等於
 if [ $【變數】 -lt 【數值】 ]; then  if %【變數】% lss 【數值】 (  小於
 if [ $【變數】 -le 【數值】 ]; then  if %【變數】% leq 【數值】 (  小於等於
 if [ $【變數】 -gt 【數值】 ]; then  if %【變數】% gtr 【數值】 (  大於
 if [ $【變數】 -ge 【數值】 ]; then  if %【變數】% geq 【數值】 (  大於等於
 if [ $【變數】 = "【字串】" ]; then  if %【變數】%==【文字列】 (  等於
 if [ $【變數】 != "【字串】" ]; then  if not %【變數】%==【文字列】 (  不等於
 if [ -e 【檔案 or 資料夾】 ]; then  if exist 【檔案 or 資料夾】 (  檔案或資料夾存在
 if [ ! -e 【檔案or 資料夾】 ]; then  if not exist 【檔案 or 資料夾】 (  檔案或資料夾不存在
 if [ -f 【物件】 ]; then  for %%A in ("【物件】") do (set 【變數】=%%~aA)
 if  "%【變數】:~0,1%"=="-" (

 物件是檔案

※shell裡面如果是if [ ! -f 【物件】 ]; then的時候,對應的bat是

if  not "%【變數】:~0,1%"=="-" (

意思是判斷物件是否是檔案以外

 if [ -d 【物件】 ]; then  for %%A in ("【物件】") do (set 【變數】=%%~aA)
 if  "%【變數】:~0,1%"=="d" (
 物件是資料夾
 if [ -s 【檔案】 ]; then  for %%A in ("【檔案】") do (set 【變數】=%%~zA)
 if  %【變數】% gtr 0 (
 檔案的size大於0
 `date '+%Y%m%d'`  %date:~0,4%%date:~5,2%%date:~8,2%  2018/9/30 → 20180930
 find 【路徑】 -mtime +【數字】 -name "*" -type f -exec rm -f {} \;

 PowerShell -Command "Get-ChildItem '【路徑】'

-force | Where-Object {($_.Mode.Substring(0,1)

-ne 'd') -and ($_.LastWriteTime -lt (Get-Date).

AddDays(-【數字+1】))} | Remove-Item  -force"

將指定路徑下更新日期在【數字+1】天以前的檔案刪除

例如:把路徑下更新日期在7天之前的檔案刪除

shell: find 【路徑】 -mtime +6 -name "*" -type f -exec rm -f {} \;

bat:PowerShell -Command "Get-ChildItem '【路徑】' -force |

Where-Object {($_.Mode.Substring(0,1) -ne 'd') -and (

$_.LastWriteTime -lt (Get-Date).AddDays(-7))} | Remove-Item  -force"

 source 【****.sh】

【****.sh】

 call 【****.bat】  呼叫其它檔案
 `date '+%Y/%m/%d %H:%M:%S'`  %date% %time:~0,8%  2018/8/24 8:45:30 → 2018/08/24 08:45:30
 rm 【檔案】  del /f /q 【檔案】  刪除
 rm -f 【檔案】  del /f /q 【檔案】  刪除

 rm -r 【檔名 or 資料夾】

rm -rf 【檔名 or 資料夾】

 ※檔案的時候
del /f /q 【檔案】
※資料夾的時候
rmdir /s /q 【資料夾】
 刪除
 【命令】 | tee -a 【log檔案】  DEL 【臨時檔案】
命令> 【臨時檔案】 2>&1
TYPE 【臨時檔案】
TYPE 【臨時檔案】 >>【log檔案】