将batch批处理移植为Shell脚本

Shell脚本
1.要以#!/bin/bash开头

2.变量引用赋值语句
Shell
a="123"
批处理
set a=123
引用写法,后一种写法在变量和字符串拼接时可以避免歧义
$a 或者 ${a}
批处理
%a%

3.路径名最好都统一成反斜杠

4.判断文件是否存在
批处理
if NOT EXIST %input% (
Shell
if [ ! -f $input ]; then

5.表达式计算
批处理
set /A a2=%a%/2
shell
half=2
let a2=($a / $half)

6.获取系统时间转换为指定格式字符串
批处理
set date=%date: =0%
set adate=%adate:~0,4%%adate:~5,2%%adate:~8,2%
Shell
adate=$(date +"%Y%m%d")

7.遍历文件
批处理
for /f "usebackq" %%i in (`dir /b %dir%\*.txt`) do call :test_file %%~ni %%i
exit /b
:test_file
echo %1
exit /b

Shell
for i in $dir/*.txt; do
id=$i
echo $id
done

8.给文件添加换行
批处理
echo. >> %file%
Shell
echo -e "\n" >> $file

9.将某个文件内容复制到目标文件
批处理
type dir\file > %target%
Shell
cat dir/file > $target

10.逐行遍历文本文件中分割输出
批处理
for /f "tokens=1,* delims=^:" %%i in (%file%) do (
echo %%i|findstr "^TEST_" && echo %%i=%%j >> %file1% ||echo %%i:%%j >> %file2%
)

Shell脚本
cat $file | while read LINE
do
k=$(echo $LINE | cut -d: -f1)
v=$(echo $LINE | cut -d: -f2)
if [[ $k = TEST_* ]]
then
echo "$k=$v" >> $file1
elif [[ $k = "" ]] || [[ $v = "" ]]
then
echo "empty line"
else
echo "$k:$v" >> $file2
fi
done

11.判断程序执行结果
Shell脚本
$program
rc=$?
if [[ $rc != 0 ]] ; then
exit $rc
fi

12.获取不包含路径名和扩展名的文件名
Shell脚本
for i in $dir/*.txt; do
#去掉路径名
file1=${i##*/}
#去掉扩展名
file2=${file1%.*}
echo $file2
done

13.逻辑判断
批处理
if %exp%==A1 (
...
) else if %exp%==A2 (
) else (
...
)
Shell脚本
if [[ $exp == A1 ]]
then
...
elif [[ $exp == A2 ]]
then
...
else
...
fi

注意,shell脚本的操作符和条件之间要有空格