一篇教会你写90%的shell脚本(入门小结)

2020-05-11 13:57:41王旭
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:

输入重定向

bash.sh < file : 将脚本的输入重定向到file,由file提供参数

输出重定向

bash.sh > file : 将脚本的输出数据重定向到file中,覆盖数据 bash.sh >> file : 将脚本的输出数据重定向到file中,追加数据 command >> file 2>&1 : 将 stdout 和 stderr 合并后重定向到 file

读取外部输入

命令:read arg (脚本读取外部输入并赋值到变量上)
在shell脚本执行到上述命令时,停止脚本执行并等待外部输入,将外部输入赋值到arg变量上,继续执行脚本

文件引用

引用其他的文件之后,可以使用其变量、函数等等,相当于将引用的文件包含进了当前文件

两种方式:

. file_pathfile_name source file_pathfile_name

颜色标识

printf "33[32m SUCCESS: yay 33[0mn";
printf "33[33m WARNING: hmm 33[0mn";
printf "33[31m ERROR: fubar 33[0mn";

输出结果:

长句换行

在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语句