一、腳本對(duì)應(yīng)環(huán)境:
【1】shell:linux環(huán)境;后綴名為.sh
主要用在linux中,而linux系統(tǒng)對(duì)應(yīng)的shell又有很多,如Bourne Shell(/usr/bin/sh或/bin/sh),又如Bourne Again Shell(/bin/bash)由于Bourne Again Shell(/bin/bash)免費(fèi)且易用,故使用較多。
對(duì)應(yīng)的腳本文件后綴名為.sh。
注:#!
告訴系統(tǒng)其后路徑所指定的程序即是解釋此腳本文件的 Shell 程序。如#!/bin/sh,#!/bin/bash,通常放于腳本文件首行。
【2】bat:windows環(huán)境;后綴名為.bat或者.cmd
主要用于windows中,又名批處理文件,其每一行指令都是一條dos指令,對(duì)應(yīng)腳本文件后綴名為.bat或者.cmd。
二、腳本執(zhí)行:
【1】shell執(zhí)行
1.直接在
bash命令窗口執(zhí)行
shell相關(guān)命令。
2.將shell命令保存為文件,執(zhí)行文件
就可以運(yùn)行shell命令。
注:由于在linux中對(duì)文件的權(quán)限管理較細(xì),故如果使用shell腳本文件,必須使其具有可執(zhí)行權(quán)限,對(duì)腳本授權(quán)chmod +x ./文件名.sh #使腳本具有執(zhí)行權(quán)限,執(zhí)行腳本./test.sh #執(zhí)行腳本,./必須加,因?yàn)楫?dāng)前文件沒有加入到linux的path中,linux僅只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 path中。
【2】bat腳本執(zhí)行
1.直接在windows的dos窗口即
cmd窗口執(zhí)行
bat相關(guān)命令。
2.將bat命令保存為bat文件,在windows中文件權(quán)限限制沒有l(wèi)inux中那么嚴(yán)格,故相關(guān)bat腳本文件可以直接雙擊執(zhí)行
或者命令行執(zhí)行
。
三、腳本相關(guān)命令:
1. shell命令
【1】shell變量
#!/bin/bash
# 定義變量如下,變量名和等號(hào)之間不能有空格
name="變量定義"
# 變量使用,使用一個(gè)定義過的變量,只要在變量名前面加美元符號(hào)即可
echo $name
# 變量外面的花括號(hào)是為了區(qū)分邊界,加不加都可以
echo ${name} # $只在使用變量的時(shí)候加,再次賦值不加
#使用 readonly 命令可以將變量定義為只讀變量,只讀變量的值不能被改變。
name="哈哈哈"
readonly name
name="修改只讀變量" # 報(bào)錯(cuò)/bin/sh: NAME: This variable is read only.
# 使用 unset 命令可以刪除變量,變量被刪除后不能再次使用,unset 命令不能刪除只讀變量。
name="旺旺旺"
unset name # 刪除name變量
echo ${name} # 無輸出
# 字符串可以使用單引號(hào)'',也可以使用雙引號(hào)"",也可以不用引號(hào)
# 單引號(hào)里的任何字符都會(huì)原樣輸出,單引號(hào)字符串中的變量是無效的,可以用作字符串拼接使用
# 雙引號(hào)里可以有變量,也可以出現(xiàn)轉(zhuǎn)義字符
name_one='單引號(hào)'
name_one_p='單引號(hào)拼接,'${name_one}'拼接結(jié)束'
echo ${name_one_p} # 輸出:單引號(hào)拼接,單引號(hào)拼接結(jié)束
name_two="雙引號(hào)"
name_two_p1="雙引號(hào)拼接1,${name_two}拼接結(jié)束"
name_two_p2="雙引號(hào)拼接2,"${name_two}"拼接結(jié)束"
echo ${name_two_p1} ${name_two_p2} #輸出:雙引號(hào)拼接1,雙引號(hào)拼接結(jié)束 雙引號(hào)拼接2,雙引號(hào)拼接結(jié)束
# 獲取字符串長度,變量為數(shù)組時(shí),${#arr} 等價(jià)于 ${#arr[0]}
name="哈哈哈"
echo ${#name} # 輸出:3
# 提取子字符串,從第4個(gè)字符開始提取2個(gè)字符(第一個(gè)字符的索引值為 0)
name="小不點(diǎn)最愛喝獸奶"
echo ${name:3:2} # 輸出:最愛
# 查找子字符串,查找字符'奶'或'愛'的位置(哪個(gè)字母先出現(xiàn)就計(jì)算哪個(gè))。這個(gè)查找中文有點(diǎn)瑕漬,應(yīng)該是字符編碼問題。
name="wafenhicfsr"
echo `expr index "${name}" cf` # 輸出:3
# 數(shù)組:bash支持一維數(shù)組(不支持多維數(shù)組),并且沒有限定數(shù)組的大小。
# 定義數(shù)組:用括號(hào)來表示數(shù)組,數(shù)組元素用"空格"符號(hào)分割開
arr=(v1 v2 v3 ... vn)
arr=(
lily
湯姆
123
)
arr[0]=哈哈哈 # 單獨(dú)定義數(shù)組的各個(gè)分量
arr[2]="123"
arr[n]="nnn" # 可以不使用連續(xù)的下標(biāo),而且下標(biāo)的范圍沒有限制。
# 讀取數(shù)組格式 ${數(shù)組名[下標(biāo)]}
arr=(lily 湯姆 123)
echo ${arr[1]} # 輸出:湯姆
# 使用 @ 符號(hào)可以獲取數(shù)組中的所有元素
echo ${arr[@]} # 輸出:lily 湯姆 123
# 獲取數(shù)組的長度
echo ${#arr[@]} # 取得數(shù)組元素的個(gè)數(shù)
echo ${#arr[*]} # 取得數(shù)組元素的個(gè)數(shù)
echo ${#arr[1]} # 取得數(shù)組單個(gè)元素的長度
# 注釋,常用的都是以#為注釋
:<<EOF 注釋... EOF
或
:<<z 注釋 z
或
:<<! 注釋... !
【2】為shell腳本傳遞參數(shù)
腳本中以$n獲取參數(shù), $0 為執(zhí)行的文件名(包含文件路徑),$1接受第一個(gè)參數(shù),$2第二個(gè)參數(shù)…,以此類推
# 文件名./test.sh
#!/bin/bash
echo "shell傳參腳本學(xué)習(xí)"
echo "執(zhí)行的文件名:$0"
echo "第一個(gè)參數(shù):$1"
echo "第二個(gè)參數(shù):$2"
echo "第三個(gè)參數(shù):$3"
echo "傳遞到腳本的參數(shù)個(gè)數(shù):$#"
echo "以\"1參 2參 3參 n參\"的形式輸出所有參數(shù):$*"
echo "腳本運(yùn)行的當(dāng)前進(jìn)程ID號(hào):$$"
echo "后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程的ID號(hào):$!"
echo "與\$*相同,但是使用時(shí)加引號(hào),并在引號(hào)中返回每個(gè)參數(shù):$@"
echo "顯示Shell使用的當(dāng)前選項(xiàng):$-"
echo "顯示最后命令的退出狀態(tài)。0表示沒有錯(cuò)誤,其他任何值表明有錯(cuò)誤:$?"
修改test.sh文件為可執(zhí)行:chmod -x test.sh
執(zhí)行test.sh文件:./test.sh 12 哈哈哈 fggg
執(zhí)行結(jié)果如圖:
【3】shell數(shù)組
Bash Shell 只支持一維數(shù)組(不支持多維數(shù)組),且各值以空格分開文章來源:http://www.zghlxwxcb.cn/news/detail-699642.html
# 1.普通數(shù)組
arr_ordinary=("lily" 123 "哈哈哈") # 定義
echo ${arr_ordinary[1]} # 訪問
# 2.關(guān)聯(lián)數(shù)組(與Map類似):可以使用任意的字符串、或者整數(shù)作為下標(biāo)來訪問數(shù)組元素。
# 語法:declare -A array_name, -A 選項(xiàng)就是用于聲明一個(gè)關(guān)聯(lián)數(shù)組。
declare -A arr_correlation=(["name"]="lily" ["age"]=18 ["sex"]="男")
# 也可以先聲明一個(gè)關(guān)聯(lián)數(shù)組,然后再設(shè)置鍵和值
declare -A arr_declare
arr_declare["name"]="lily"
arr_declare["age"]=18
arr_declare["sex"]="男"
# 使用鍵來訪問數(shù)組
echo ${arr_declare["name"]}
# 獲取數(shù)組中所有元素,使用 @ 或 * 可以獲取數(shù)組中的所有元素
echo "數(shù)組的值為: ${arr_declare[*]}"
echo "數(shù)組的值為: ${arr_declare[@]}" # 相當(dāng)于map中獲取所有值value
echo "數(shù)組的鍵為: ${!arr_declare[*]}"
echo "數(shù)組的鍵為: ${!arr_declare[@]}" # 相當(dāng)于map中獲取所有鍵
echo "數(shù)組元素個(gè)數(shù)為: ${#my_array[*]}"
echo "數(shù)組元素個(gè)數(shù)為: ${#my_array[@]}"
【4】shell運(yùn)算符
#【1】算術(shù)運(yùn)算符
a1=6
a2=2
# 1.加,+
echo `expr $a1 + $a2` # 輸出8
# 2.減,-
echo `expr $a1 - $a2` # 輸出4
# 3.乘,*
echo `expr $a1 \* $a2` # 輸出12,乘法的*前面必須加\
# 4.除,/
echo `expr $a1 / $a2` # 輸出3
# 5.取余,%
echo `expr $a1 % $a2` # 輸出0
# 6.賦值,=
a1=$a2 # 將變量a2的值賦給a1
# 7.相等,==,比較兩個(gè)數(shù)字相等返回true
[ $a1 == $a2 ] # 不能echo,不能直接使用,必須配合if或者test使用
# 8.不相等,!=,比較兩個(gè)數(shù)字不相等返回true
[ $a1 != $a2 ]
#【2】關(guān)系運(yùn)算符
關(guān)系運(yùn)算符只支持?jǐn)?shù)字,不支持字符串,除非字符串的值是數(shù)字。
且不能直接使用,只能配合if或者test使用
a1=2
a2=4
# 檢測兩個(gè)數(shù)是否相等,相等返回 true
[ $a1 -eq $a2 ] # 返回false
# 檢測兩個(gè)數(shù)是否不相等,不相等返回 true
[ $a1 -ne $a2 ] # 返回 true
# 檢測左邊的數(shù)是否大于右邊的,如果是,則返回 true
[ $a1 -gt $a2 ] # 返回false
# 檢測左邊的數(shù)是否小于右邊的,如果是,則返回 true
[ $a1 -lt $a2 ] #返回 true
# 檢測左邊的數(shù)是否大于等于右邊的,如果是,則返回 true
[ $a1 -ge $a2 ] #返回 false
# 檢測左邊的數(shù)是否小于等于右邊的,如果是,則返回 true
[ $a1 -le $a2 ] #返回 true
#【3】布爾運(yùn)算符
a1=2
a2=4
# 非運(yùn)算(!),表達(dá)式為 true 則返回 false,否則返回 true
[ ! false ] # 返回 true
# 或運(yùn)算(-o),有一個(gè)表達(dá)式為 true 則返回 true
[ $a1 -lt 2 -o $a2 -gt 4 ] 返回 false
# 與運(yùn)算(-a),兩個(gè)表達(dá)式都為 true 才返回 true
[ $a1 -lt 2 -a $a2 -gt 4] 返回 false
#【4】邏輯運(yùn)算符
a1=2
a2=4
# 邏輯的 AND(&&)
[[ $a -lt 4 && $b -gt 5]] # 返回 false
# 邏輯的 OR(||)
[[ $a -lt 4 || $b -gt 5]] # 返回 true
#【5】字符串運(yùn)算符
a1="hhh"
a2="ggg"
# (=)檢測兩個(gè)字符串是否相等,相等返回 true
[ $a1 = $a2 ] # 返回 false
# (!=)檢測兩個(gè)字符串是否不相等,不相等返回 true
[ $a1 != $a2 ] # 返回 true
# (-z)檢測字符串長度是否為0,為0返回 true
[ -z $a ] # 返回 false
# (-n)檢測字符串長度是否不為 0,不為 0 返回 true
[ -n "$a" ] # 返回 true
# ($)檢測字符串是否不為空,不為空返回 true
[ $a ] # 返回 true
#【6】shell輸出語句
1.echo:輸出字符串,一般使用情況
2.printf:格式化輸出字符串,功能更強(qiáng),類似于c語言的輸出
語法為:printf format-string [arguments...]
如:printf "%-10s %-8s %-5d\n" 姓名 性別 年齡
#【7】test命令
# 代碼中的 [] 執(zhí)行基本的算數(shù)運(yùn)算
num1=100
num2=100
if test $[num1] -eq $[num2] # 測出test后面的語句看shell相關(guān)運(yùn)算符
then
echo '兩個(gè)數(shù)相等!'
else
echo '兩個(gè)數(shù)不相等!'
fi
#【8】流程控制語句
#(8.1) if語句
# 語法如下
if condition
then
command1
command2
...
commandN
fi
# 寫成一行
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
#(8.2) if-else語句
# 語法如下
if condition
then
command1
command2
...
commandN
else
command
fi
#(8.3) if-else-if-else語句
注:如果使用 ((...)) 作為判斷語句,大于和小于可以直接使用 > 和 <
# 語法如下
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
#(8.4) 循環(huán)語句
#(8.4.1) for循環(huán)語法如下
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
# for循環(huán)示例,打印1,2,3,4,5
for item in 1 2 3 4 5
do
echo "$item"
done
#(8.4.2) while循環(huán)語句語法
while condition
do
command
done
# while循環(huán)示例,其中l(wèi)et 命令,它用于執(zhí)行一個(gè)或多個(gè)表達(dá)式,變量計(jì)算中不需要加上 $ 來表示變量
value=1
while(( $value<=5 ))
do
echo $value
let "value++"
done
#(8.4.3) 無限循環(huán)語句語法
while :
do
command
done
# 或者
while true
do
command
done
# 或者
for (( ; ; ))
#(8.4.4) until 循環(huán)
# 注:until 循環(huán)執(zhí)行一系列命令直至條件為 true 時(shí)停止
until condition
do
command
done
# 示例,輸出 0 ~ 5 的數(shù)字
a=0
until [ ! $a -lt 5 ]
do
echo $a
a=`expr $a + 1`
done
#(8.5) 多分枝選擇語句
注:case ... esac 為多選擇語句,每個(gè) case 分支用右圓括號(hào)開始,用兩個(gè)分號(hào) ;; 表示 break,即執(zhí)行結(jié)束,跳出整個(gè) case ... esac 語句,esac(就是 case 反過來)作為結(jié)束標(biāo)記
# 語法如下
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
# 示例
read number # 阻塞并讀取用戶輸入
case $number in
1)
echo "用戶輸入了$number" ;;
2)
echo "用戶輸入了$number" ;;
*)
echo "相當(dāng)于default執(zhí)行";;
esac
#(8.6) break和continue
在shell中也是使用break和continue跳出循環(huán),含義與其它編程語言類似
#【9】shell函數(shù)
語法與js類似,調(diào)用方式稍有不同
# 語法如下
[ function ] funname [()]
{
action;
[return int;]
}
注:
1.可以帶function fun() 定義,也可以直接fun() 定義,不帶任何參數(shù)。
2.參數(shù)返回,可以顯示加return 返回,如果不加,將以最后一條命令運(yùn)行結(jié)果,作為返回值。 return后跟數(shù)值n(0-255)
示例及使用如下
# 在shell腳本中函數(shù)必須先定義后使用
# 函數(shù)定義如下
usemyshellfun(){
echo "第一個(gè)參數(shù)為 $1 !"
echo "第二個(gè)參數(shù)為 $2 !"
echo "第十個(gè)參數(shù)為 $10 !"
echo "第十個(gè)參數(shù)為 ${10} !"
echo "第十一個(gè)參數(shù)為 ${11} !"
echo "參數(shù)總數(shù)有 $# 個(gè)!"
echo "作為一個(gè)字符串輸出所有參數(shù) $* !"
return $((2+3))
}
# 調(diào)用函數(shù)并傳參
usemyshellfun 1 2 3 4 5 6 7 8 9 34 73
# 注意,$10 不能獲取第十個(gè)參數(shù),獲取第十個(gè)參數(shù)需要${10}。當(dāng)n>=10時(shí),需要使用${n}來獲取參數(shù)。
#【10】shell輸入輸出重定向
# 將輸出重定向到 file
command > file
# 將輸入重定向到 file
command < file
# 將輸出以追加的方式重定向到 file
command >> file
# 將文件描述符為 n 的文件重定向到 file
n > file
# 將文件描述符為 n 的文件以追加的方式重定向到 file
n >> file
# 將輸出文件 m 和 n 合并
n >& m
# 將輸入文件 m 和 n 合并
n <& m
# 將開始標(biāo)記 tag 和結(jié)束標(biāo)記 tag 之間的內(nèi)容作為輸入
<< tag
一般情況下,每個(gè) Unix/Linux 命令運(yùn)行時(shí)都會(huì)打開三個(gè)文件:
1.標(biāo)準(zhǔn)輸入文件(stdin):stdin的文件描述符為0,Unix程序默認(rèn)從stdin讀取數(shù)據(jù)。
2.標(biāo)準(zhǔn)輸出文件(stdout):stdout 的文件描述符為1,Unix程序默認(rèn)向stdout輸出數(shù)據(jù)。
3.標(biāo)準(zhǔn)錯(cuò)誤文件(stderr):stderr的文件描述符為2,Unix程序會(huì)向stderr流中寫入錯(cuò)誤信息。
# 將錯(cuò)誤流stderr 重定向到 file
command 2>file
# 將錯(cuò)誤流stderr 重定向并追加到 file
command 2>>file
# 將輸出流stdout 和錯(cuò)誤流 stderr 合并后重定向到 file
command > file 2>&1
# 追加方式
command >> file 2>&1
另:/dev/null 文件
# /dev/null 是一個(gè)特殊的文件,寫入到它的內(nèi)容都會(huì)被丟棄;如果嘗試從該文件讀取內(nèi)容,那么什么也讀不到
# 將命令的輸出重定向到它,會(huì)起到"禁止輸出"的效果
# 如果希望執(zhí)行某個(gè)命令,但又不希望在屏幕上顯示輸出結(jié)果
command > /dev/null
# 如果希望屏蔽 stdout 和 stderr
command > /dev/null 2>&1
2. bat命令
bat相關(guān)命令和shell命令有異曲同工之妙,而且bat會(huì)比shell使用簡單點(diǎn)文章來源地址http://www.zghlxwxcb.cn/news/detail-699642.html
【1】獲取和設(shè)置相關(guān)變量
# 獲取常用變量不需要區(qū)分大小寫,使用%variable%可以獲取變量值
# 獲取當(dāng)前目錄
echo %cd%
# 獲取命令搜索路徑
echo %path%
# 獲取當(dāng)前日期
echo %date% # 格式:2023/03/22 周三
# 獲取當(dāng)前時(shí)間
echo %time% # 格式:14:26:46.97
# 獲取 0 和 32767 之間的任意十進(jìn)制數(shù)字
echo %random%
# 獲取上一命令執(zhí)行結(jié)果碼
echo %errorlevel%
# 變量設(shè)置,與shell有所不同,格式如下
set [variable=[string]] #variable表示變量名,string表示變量值
# 例
set temp="哇哈哈"
echo %temp% # 輸出:"哇哈哈"
【2】字符串操作
# 字符串截取,命令格式 echo %var:~n,k%,
# 1."var",表示待截取字符的字符串
# 2."~"取字符標(biāo)志符
# 3."n"表示字符截取起始位置
# 4."k" 表示截取幾位
set temp="wahaha哇哈哈123"
echo %temp:~2,3% # 輸出:hah
echo %temp:~0,-3% # 輸出:wahaha哇哈哈
# 字符串替換,命令格式命令%var:old_str=new_str%
set replace_str=%temp:123=熏悟空%
echo %replace_str% # 輸出:wahaha哇哈哈熏悟空
echo %temp% # 輸出:wahaha哇哈哈123,不改變?cè)?/span>
【3】bat注釋
rem 注釋符,也可以用兩個(gè)冒號(hào)代替(::)
rem 這是一個(gè)注釋,此注釋不會(huì)顯示
【4】bat輸出語句
echo 顯示信息,或啟用或關(guān)閉命令回顯。@字符放在命令前將關(guān)閉該命令回顯,無論此時(shí)echo是否為打開狀態(tài)
# 批處理命令在執(zhí)行時(shí)顯示自身命令行
echo on
# 批處理命令在執(zhí)行時(shí)不顯示自身命令行
echo off
# 關(guān)閉echo off命令行自身的顯示
@echo off
# 創(chuàng)建包含字符test的test.txt文件
echo test > file.txt
【5】基本命令
# 暫停并輸出“請(qǐng)按任意鍵繼續(xù). . .”
pause 等待并提示"請(qǐng)按任意鍵繼續(xù). . ." # 阻塞窗口,程序執(zhí)行完以后不會(huì)關(guān)閉窗口
pause > nul # 等待但不出現(xiàn)提示語
echo wait a moment.. & pause > nul # 輸出指定信息并阻塞窗口
# 程序執(zhí)行結(jié)果返回碼,執(zhí)行成功返回0,失敗返回為1
echo %errorlevel%
# 啟動(dòng)一個(gè)單獨(dú)的窗口以運(yùn)行指定的程序或命令,程序繼續(xù)向下執(zhí)行
start [command/program] [parameters]
# 退出CMD.EXE程序或當(dāng)前批處理腳本
# 1./B:指定要退出當(dāng)前批處理腳本而不是 CMD.EXE。如果從一個(gè)批處理腳本外執(zhí)行,則會(huì)退出 CMD.EXE
# 2.exitCode:指定一個(gè)數(shù)字號(hào)碼。如果指定了 /B,將 ERRORLEVEL設(shè)成那個(gè)數(shù)字。如果退出 CMD.EXE,則用那個(gè)數(shù)字設(shè)置過程退出代碼
exit [/B] [exitCode]
# 清除屏幕內(nèi)容
cls
# 提供 Windows 命令的幫助信息
help [command]
# 設(shè)置cmd窗口的標(biāo)題
title 標(biāo)題名字
# 設(shè)置默認(rèn)的控制臺(tái)前景和背景顏色
# 顏色屬性由兩個(gè)十六進(jìn)制數(shù)字指定:第一個(gè)為背景,第二個(gè)則為前景
# 以下任意倆種顏色組合
# 0 = 黑色 8 = 灰色
# 1 = 藍(lán)色 9 = 淡藍(lán)色
# 2 = 綠色 A = 淡綠色
# 3 = 湖藍(lán)色 B = 淡淺綠色
# 4 = 紅色 C = 淡紅色
# 5 = 紫色 D = 淡紫色
# 6 = 黃色 E = 淡黃色
# 7 = 白色 F = 亮白色
color [attr] # attr 指定控制臺(tái)輸出的顏色屬性
# 從一個(gè)批處理程序調(diào)用另一個(gè)批處理程序,并且不終止父批處理程序
call 路徑文件名 標(biāo)簽
# 跳轉(zhuǎn)命令。程序指針跳轉(zhuǎn)到指定的標(biāo)簽,從標(biāo)簽后的第一條命令開始繼續(xù)執(zhí)行批處理程序
goto label # label是參數(shù),指定所要轉(zhuǎn)向的批處理程序中的行
# 例子,打開多個(gè)cmd窗口直到資源耗盡
:label
start
goto label
【6】語句結(jié)構(gòu)
####
####1.if語句
####
# if語句實(shí)現(xiàn)條件判斷,包括字符串比較、存在判斷、定義判斷等。# # 通過條件判斷,if語句即可以實(shí)現(xiàn)選擇功能。
/*
1.字符串比較
語法格式:if [/i] [not] str1 比較操作符 str2 (相關(guān)操作) [else (相關(guān)操作)]
有/i則不區(qū)分字符串大小寫;選擇not項(xiàng),則對(duì)判斷結(jié)果進(jìn)行邏輯非
比較操作符:
1.== - 等于
2.EQU - 等于
3.NEQ - 不等于
4.LSS - 小于
5.LEQ - 小于或等于
6.GTR - 大于
7.GEQ - 大于或等于
*/
# 例子
set str1=123456
set str2=abcdef
if %str1%==%str2% (echo 字符串相同!) else (echo 字符串不相同!)
if /i not %str1%==%str2% (echo 字符串不相同!) else (echo 字符串相同!)
/*
2.存在判斷:存在判斷的功能是判斷文件或文件夾是否存在
語法格式:if [not] exist filename (相關(guān)操作) [else (相關(guān)操作)]
*/
# 例子1
if exist %0 echo 文件%0是存在的! # %0代表該批處理的全稱(包括驅(qū)動(dòng)器盤符、路徑、文件名和擴(kuò)展類型)
# 例子2
if not exist %0(
echo 文件夾%0不存在!
)else echo 文件夾%0存在!
/*
3.定義判斷:定義判斷的功能是判斷變量是否存在,即是否已被定義
語法格式:if [not] defined variable (相關(guān)操作) [else(相關(guān)操作)]
*/
# 例子1
set var=111
if defined var (echo var=%var%) else echo var尚未定義!
# 例子2
set var=% %
if defined var (echo var=%var%) else echo var尚未定義!
####
####2.for循環(huán)語句
####
/*
1.無開關(guān):無開關(guān)的for語句能夠?qū)υO(shè)定的范圍內(nèi)進(jìn)行循環(huán),是最基本的for循環(huán)語句
語法格式:for %%v in (循環(huán)值values) do (相關(guān)操作)
相關(guān)解釋:
%%v是批處理程序里面的書寫格式,注意v只能是單字符。在DOS中書寫為%v,即只有一個(gè)百分號(hào)(%);values就是需要我們?cè)O(shè)定的循環(huán)范圍,類似于C語言里面的循環(huán)變量;do后面的(相關(guān)操作)就是循環(huán)所執(zhí)行的命令,即循環(huán)體
*/
# 例子1(在腳本文件中)
for %%i in (a,"b c",d,123) do echo %%i
# 例子2(在dos或者cmd窗口中)
for %i in (a,"b c",d,123) do echo %i
/*
2.開關(guān)/L:開關(guān)/L的for語句,可以根據(jù)循環(huán)值velues里面的設(shè)置進(jìn)行循環(huán),從而實(shí)現(xiàn)對(duì)循環(huán)次數(shù)的直接控制
語法格式:for /L %%v in (start,step,end) do (相關(guān)操作)
相關(guān)解釋:
start為開始計(jì)數(shù)的初始值,step為每次遞增的值,end為結(jié)束值。當(dāng)end小于start時(shí),step需要設(shè)置為負(fù)數(shù)。
*/
# 例子1,打印1到10(小于10)步長為2的數(shù)字
for /l %%i in (1,2,10) do @echo %%i
# 例子2(在dos或者cmd窗口使用)
for /l %i in (1,2,10) do @echo %i
/*
3.開關(guān)/f:開關(guān)/f的for語句可以解析字符串和文本
語法格式:for /f ["options"] %%v in (循環(huán)值values) do (相關(guān)操作)
相關(guān)解釋:
options是(eol=c、skip=n、delims=xxx、tokens=x,y,m-n、usebackq)中的一個(gè)或多個(gè)的組合。
*/
/*
4.開關(guān)/D或/R:開關(guān)/D或/R的for語句是與目錄或文件有關(guān)的命令,一般情況下很少使用。含開關(guān)/R的命令有時(shí)候被用于通過遍歷文件夾來查找某一個(gè)文件或文件夾
*/
五、案例:
1. shell:
【1】Shell腳本: https://zhuanlan.zhihu.com/p/601971378?utm_id=0
【2】109 個(gè)實(shí)用 shell 腳本,建議收藏!: https://zhuanlan.zhihu.com/p/468003798
2. bat:
【1】圖標(biāo)恢復(fù).bat(解決桌面圖標(biāo)變?yōu)榘准埖那闆r)
@echo off
taskkill /f /im explorer.exe
CD /d %userprofile%\AppData\Local
DEL IconCache.db /a
start explorer.exe
echo 執(zhí)行完成
【2】清理圖標(biāo)緩存.bat
@echooff
color0A
taskkill/f/imexplorer.exe
attrib-h-s-r”%userprofile%\AppData\Local\IconCache.db“
del/f”%us
echo 執(zhí)行完成
【3】Navicat腳本
@echo off
echo Delete HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium\Registration[version and language]
for /f %%i in ('"REG QUERY "HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium" /s | findstr /L Registration"') do (
reg delete %%i /va /f
)
echo.
echo Delete Info folder under HKEY_CURRENT_USER\Software\Classes\CLSID
for /f %%i in ('"REG QUERY "HKEY_CURRENT_USER\Software\Classes\CLSID" /s | findstr /E Info"') do (
reg delete %%i /va /f
)
echo.
echo Finish
pause
到了這里,關(guān)于【Linux】shell腳本和bat腳本:的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!