-u 用户名
-p 用户密码
-h 服务器ip地址
-D 连接的数据库
-N 不输出列信息
-B 使用tab键 代替 分隔符
-e 执行的SQL语句
退出脚本
命令:exit
在退出脚本时使用不同的错误码,这样可以根据错误码来判断发生了什么错误。
在绝大多数 shell 脚本中,exit 0 表示执行成功,exit 1 表示发生错误。
对错误与错误码进行一对一的映射,这样有助于脚本调试。
命令:set -e 或者 set +e
set -e表示从当前位置开始,如果出现任何错误都将触发exit。相反,set +e表示不管出现任何错误继续执行脚本。
如果脚本是有状态的(每个后续步骤都依赖前一个步骤),那么请使用set -e,在脚本出现错误时立即退出脚本。
如果要求所有命令都要执行完(很少会这样),那么就使用set +e。
shell脚本调试
检查是否有语法错误-n:
bash -n script_name.sh
使用下面的命令来执行并调试 Shell 脚本-x:
bash -x script_name.sh
调试count_odd_number.sh 程序案例:
#!/usr/bin.env bash
# 用于计算数组中奇数的和
# @author liyangyang
# @time 2019/09/17
sum=0
for num in 1 2 3 4;do
re=${num}%2
if (( ${re} == 1 ));then
sum=$[${sum}+${num}]
fi
done
echo ${sum}
首先检查有无语法错误:
bash -n count_odd_number.sh
没有输出,说明没有错误,开始实际调试:
bash -x count_odd_number.sh
调试结果如下:
+ sum=0 + for num in 1 2 3 4 + re=1%2 + (( 1%2 == 1 )) + sum=1 + for num in 1 2 3 4 + re=2%2 + (( 2%2 == 1 )) + for num in 1 2 3 4 + re=3%2 + (( 3%2 == 1 )) + sum=4 + for num in 1 2 3 4 + re=4%2 + (( 4%2 == 1 )) + echo 4 4
其中的输出显示了程序执行的每一步,通过观察程序执行的步骤是否满足预期从而达到调试的效果
带有 + 表示的是 Shell 调试器的输出,不带 + 表示程序的输出。
案例:
这是es(ElasticSearch)官方启动服务的脚本,看可不可以理解吧~
#!/usr/bin/env bash
# CONTROLLING STARTUP:
#
# This script relies on a few environment variables to determine startup
# behavior, those variables are:
#
# ES_PATH_CONF -- Path to config directory
# ES_JAVA_OPTS -- External Java Opts on top of the defaults set
#
# Optionally, exact memory values can be set using the `ES_JAVA_OPTS`. Note that
# the Xms and Xmx lines in the JVM options file must be commented out. Example
# values are "512m", and "10g".
#
# ES_JAVA_OPTS="-Xms8g -Xmx8g" ./bin/elasticsearch
source "`dirname "$0"`"/elasticsearch-env
parse_jvm_options() {
if [ -f "$1" ]; then
echo "`grep "^-" "$1" | tr 'n' ' '`"
fi
}
ES_JVM_OPTIONS="$ES_PATH_CONF"/jvm.options
ES_JAVA_OPTS="`parse_jvm_options "$ES_JVM_OPTIONS"` $ES_JAVA_OPTS"
# manual parsing to find out, if process should be detached
if ! echo $* | grep -E '(^-d |-d$| -d |--daemonize$|--daemonize )' > /dev/null; then
exec
"$JAVA"
$ES_JAVA_OPTS
-Des.path.home="$ES_HOME"
-Des.path.conf="$ES_PATH_CONF"
-cp "$ES_CLASSPATH"
org.elasticsearch.bootstrap.Elasticsearch
"$@"
else
exec
"$JAVA"
$ES_JAVA_OPTS
-Des.path.home="$ES_HOME"
-Des.path.conf="$ES_PATH_CONF"
-cp "$ES_CLASSPATH"
org.elasticsearch.bootstrap.Elasticsearch
"$@"
<&- &
retval=$?
pid=$!
[ $retval -eq 0 ] || exit $retval
if [ ! -z "$ES_STARTUP_SLEEP_TIME" ]; then
sleep $ES_STARTUP_SLEEP_TIME
fi
if ! ps -p $pid > /dev/null ; then
exit 1
fi
exit 0
fi
exit $?










