if 判断语句
var=$1
if [ $var -eq 1 ]; then
echo 'var is 1'
elif [ $var -eq 2 ]; then
echo 'var is 2'
else
echo 'var is not 1 and 2'
fi
# case 选择语句, 即我们一般语法中的switch
case $var in
'value1')
echo -e 'var is value1 for first place'
;;
'value2')
echo -e 'var is value2 for second place'
;;
*)
echo -e 'var is eq value1 or value2, so this is a default ouptput'
;;
esac
for 循环语句
- case 1 输入数字
for i in 1 2 3 4 5 6
do
echo -e "current value is $i"
done
- case 2 输出字符串
for i in 'this is a string , will be output one by one'
do
echo $i
done
- case 3 输出文件夹
for file in $HOME/.*
do
echo $file
done
- case 4 输出数组
for ele in (1,2,3,4,hello)
do
echo $ele
done
- case 5 遍历文件夹
for file in <path>
do
if test -f $file;then
rm $file
else
echo "$file is a dir"
fi
done
代码示例1(迁移文件夹):
#!/bin/bash
# 检查参数
if [ ! -n "${1}" ];then
echo "请指定一个目录来进行迁移: ls ~/Library/Application\ Support/"
exit -1
fi
Entity=$1
# 检查路径是否存在
SourceFolder="${HOME}/Library/Application Support/${Entity}"
if [ ! -d "${SourceFolder}" ];then
echo "${SourceFolder}目录不存在!"
exit -1
fi
echo "即将迁移:${SourceFolder}"
# 检查覆盖
if [ -L "${SourceFolder}" ];then
echo "源路径已经是符号连接"
ls -l "${SourceFolder}"
exit -1
fi
# 确定目标设备
TargetDevice="/Volumes/External"
read -p "目标设备为(默认 ${TargetDevice}): " InputTargetDevice
if [[ -n $InputTargetDevice && "$TargetDevice" != "$InputTargetDevice" ]];then
TargetDevice=$InputTargetDevice
fi
TargetFolder="${TargetDevice}/Library/Application Support/${Entity}"
if [ -d "${TargetFolder}" ];then
echo 目标路径"${TargetFolder}已经存在,将进行覆盖才做"
fi
# 准备迁移
echo "正在准备迁移 ${SourceFolder} => ${TargetFolder}"
mkdir -p "${TargetDevice}/Library/Application Support" \
&& mv -vn "${SourceFolder}"/* "${TargetFolder}/" \
&& rmdir "${SourceFolder}" \
&& ln -s "${TargetFolder}" "${SourceFolder}" \
&& echo "迁移成功!" \
&& exit 0
echo "迁移失败!"