|
长句换行
在shell中为避免一个语句过长,可以使用“”进行换行
使用“”换行,在脚本执行过程中还是当做一行一个语句执行,不同于enter直接换行
注意: 前添加一个空格 。 后无空格直接换行。
/mysql/bin/mysql -h test_host -P 000 -u test_user -ptest_password ;
shell操作mysql
下面案例为登录mysql,并选择操作数据库,之后进行导入数据
/mysql/mysql/bin/mysql -h test_host -P 000 -u test_user -ptest_password -e"use test_database; source data_faile; " # -e 代表执行sql语句
-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脚本调试
可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
-
函数定义[ function ] funname() { action; [return int;] }
-
参数传递
-
调用函数: fun_name 2 3 4
-
函数中使用:和shell取用函数相同 $n $# $* $? 或者加上{}funWithParam(){ echo "第一个参数为 $1 !" echo "第二个参数为 $2 !" echo "第十个参数为 $10 !" echo "第十个参数为 ${10} !" echo "第十一个参数为 ${11} !" echo "参数总数有 $# 个!" echo "作为一个字符串输出所有参数 $* !"} funWithParam 1 2 3 4 5 6 7 8 9 34 73 echo $? # 判断执行是否成功
-
函数返回值
-
return字样可存在也可不存在
-
return 只能为 return [0-255],此处的返回可作为函数执行的状态,通过$?获取的便是这个返回值
-
如果不加return , 则默认最后一条语句的执行状态所为函数执行状态的返回值,如果最后一条语句执行成功,则$?为0,否则不为0
-
使用函数返回值(Janusgraph图数据库官方启动服务脚本片段)
-
return返回的数字,只是作为函数执行状态的返回值,也就是接下来$?获取的值
-
对于类似于下面的BIN=abs_path``语句,获取的是函数体内所有的echo、printf输出组合成的一个字符串 abs_path() { SOURCE="${BASH_SOURCE[0]}" while [ -h "$SOURCE" ]; do DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" SOURCE="$(readlink "$SOURCE")" [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" done echo "test" echo "$( cd -P "$( dirname "$SOURCE" )" && pwd )" # 此函数的两个echo输出会组合成一个字符串作为下述BIN的值 }
BIN=abs_path # BIN赋值函数返回值,如果没有return,则函数中所有的echo、printf输出组合成一个字符串传入BIN
path=${BIN}/nodetool # 可直接使用
-
#### 输入输出重定向
-
一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
-
* 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
-
* 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
-
* 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
-
默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。
-
如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:
-
**输入重定向**
-
1. bash.sh < file : 将脚本的输入重定向到file,由file提供参数
-
**输出重定向**
-
1. bash.sh > file : 将脚本的输出数据重定向到file中,覆盖数据
-
2. bash.sh >> file : 将脚本的输出数据重定向到file中,追加数据
-
3. command >> file 2>&1 : 将 stdout 和 stderr 合并后重定向到 file
-
#### 读取外部输入
-
命令:`read arg` (脚本读取外部输入并赋值到变量上)
-
在shell脚本执行到上述命令时,停止脚本执行并等待外部输入,将外部输入赋值到arg变量上,继续执行脚本
-
#### 文件引用
-
引用其他的文件之后,可以使用其变量、函数等等,相当于将引用的文件包含进了当前文件
-
两种方式:
-
1. **.** file_pathfile_name
-
2. **source** file_pathfile_name
-
#### 颜色标识
-
```shell
-
printf "
|