sh
- 空行报错 3: $'\r': 未找到命令; crlf 改为 lf
实例查看当前项目的根目录下 deploy.sh 文件
Shell 脚本(shell script),是一种为 shell 编写的脚本程序
windows 下执行 .sh 文件 可以用 git bash 执行
./xx.sh
来运行分号为代码块标识
&& 左边返回真后右边代码才会执行
exit 0
只有 0 表示退出时的状态为成功 其它都为失败echo是回显,即代表回车显示,是自带换行的;而printf只是打印出来,没有换行
printf
%s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。
%-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f 指格式化为小数,其中 .2 指保留2位小数。
http://yangtze736.github.io/%E6%8A%80%E6%9C%AF/2018/05/02/shell-tips/
命令替换
输出结果暂时保存,在适当的地方输出
# 语句中需要执行一些命令,用如下方法包裹
$() 和 ``
# `` 嵌套时需要转义
# $() 不是所有的 shell 都能使用
# 执行 变量中的命令
command="ls"
${command}
- 赋值语句两边不能有空格
#! /bin/sh #! 告诉系统该脚本需要什么解释器来执行 可以不跟内容,也可以引用其它解释器路径
# 确保脚本抛出遇到的错误
set -e
# 定义变量可以直接写
name=hew 右是命令可以有空格 左边不能有空格
echo $name 用$获取变量值
# 获取工作目录
# pwd (print name of current/working directory)
dir="$(pwd)"
# 返回/e/practice
dir="$0"
# 返回 ./gitT/a.sh
dir="$(dirname "$0")"
# 返回 ./gitT
# 获取绝对地址
dir=$(cd "$(dirname "$0")";pwd)
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
以下两项操作,一般写在 shell 代码逻辑之前
set -x 会在执行每一行 shell 脚本时,把执行的内容输出来
set -e 会在执行出错时结束程序,就像其他语言中的“抛出异常”一样
接收命令行参数
执行命令 ./some.sh p1 p2
#! /bin/sh
echo "文件名" $0 # 文件名 ./some.sh
echo "参数个数" $# # 参数个数 2
echo "参数1" $1 # 参数1 p1
echo "参数2" $2 # 参数2 p2
echo "所有参数" 【$*】 # 所有参数 【p1 p2】
提交代码的脚本示例
#! /bin/sh
# 确保脚本抛出遇到的错误
set -e
method=${1:-"pull"} # 设置默认参数 注意 $1 的写法,:- 表示为空或未定义 只有 - 没有 : 表示判断未定义
# 如下模块类似 try catch
{
git add -A
git commit -m 'regular update'
# 这里后面不要跟语句,否者这个模块的返回就是 true 就不会进入下面的模块执行
} || {
echo '更改已commit 开始push'
git push
echo 'push 完成'
exit 0
}
echo "commit 完成"
# 这里注意方括号内部两侧需要空格
if [ $method = "push" ]; then
echo "git push"
git push
else
echo "git pull"
git pull
fi
echo $method "完成"
exit 0
read 命令
# read var # 将用户输入存入 var 变量
# echo 用户输入了: $var
# read
# echo 用户输入了: $REPLY # linux 默认将用户输入放到此变量
# -p 提示信息
# -t 输入时间 单位默认秒
# -s 隐藏用户输入
# -n 输入的长度
# read -p "please input name|age:" 参数放后面
# echo 用户输入了: $REPLY
# 循环读取文件中的每一行
# cat ./deploy/test.sh | while read line;
# do
# echo $line
# done