一、前言
由于笔者最近从事的工作是自动化开发,所使用的开发开发语言是python,但其中也有shell脚本的开发,shell脚本主要是简单,可以让功能可以重复执行,
eg:运行功能前需要部署环境,这时就可以写到shell脚本中,方便后期重复运行;
二、运行环境
编辑的好的shell脚本,运行时需要linux环境,一般需要使用对应的终端,像(ubuntu fedora redhat centos UOS KYLIN)等等,这其实比较麻烦,学习时,
其实可以安装个有linux终端的软件就行,例如:git bash就是一个不错的选择
三、编辑shell脚本
1、windows下,就新建个.sh结尾的文件,用行编辑器文件打开就行(eg:notepad++)
2、linux下,直接就用vi编辑器打开就行;
四、脚本内容功能介绍:
1、获取执行脚本的路径、名称、参数个数、参数内容等;
2、打印调试信息;
3、函数
4、选择、循环
5、输入输出重定向
6、bash执行其它的shell脚本;
7、凡是可以放到终端中的命令都可以放到shell脚本中让执行;
8、sed -i 命令
一般就是修改配置参数或者路径等
下面写个demo
#!/bin/bash
dirname=$(dirname "$(realpath "$0")")
echo $dirname
echo "The zero parameter :"$0
echo "The first parameter :"$1
echo "The second parameter:"$2
prog="$(basename $0)"
prepare_environment(){
echo -e "\033[1;34mPrepare environment...\033[1;37m"
#echo -e "\033[1;31mnpu...\033[1;37m"
}
func(){
echo "开始执行业务"
}
clean_environment(){
echo -e "\033[1;34mClean environment...\033[1;37m"
}
help(){
echo "Usage:$prog[OPTION]"
echo
echo "Options:"
echo
echo " -m,--mode[1p,8p]"
echo " -t,--type[acc,perf]"
echo " -h,--help Print this help."
echo
}
while [ $# -gt 0 ]; do
case "$1" in
-m|--mode)
shift # 移除当前选项
if [ -z "$(echo $1 | grep '^-')" ]; then # 检查下一个参数是否不以'-'开头
mode=$1 # 赋值给mode变量
shift # 移除已处理的参数
else
echo "Error: --mode requires an argument." >&2
exit 1
fi
;;
-t|--type)
shift # 移除当前选项
if [ -z "$(echo $1 | grep '^-')" ]; then # 检查下一个参数是否不以'-'开头
type=$1 # 赋值给precision变量
shift # 移除已处理的参数
else
echo "Error: --type requires an argument." >&2
exit 1
fi
;;
-h|--help)
help>&2
exit 2
;;
*)
echo "${0}:${1}:invalid option" >&2
help>&2
exit 2
;;
esac
done
# 这里可以添加使用mode和precision变量的代码
echo "Mode: $mode"
echo "Type: $type"
prepare_environment
func
clean_environment
###################################
#sed -i
###################################
temp='/home/file'
echo $temp
sed -i "s|CKPT_LOAD_DIR=.*|CKPT_LOAD_DIR=\"$temp\"|g" ./demo.sh
sed -i "s|--seq-length.*|--seq-length 1024 \\\|g" ./demo.sh
sed -i "/GPT_ARGS/a\ --param1 \\\\" ./demo.sh
echo '123'
sed -i "3a\name=lily" ./demo.sh
运行结果为:
对应的测试文件:demo.sh为:
#!/bin/bash
CKPT_LOAD_DIR="/home/file"
CKPT_LOAD_DIR1="aa"
GPT_ARGS="
--seq-length 1024 \
--param3