shell脚本

shell 的执行方式

守給你的承諾、 提交于 2019-12-01 10:29:45
shell执行的方式: Shell脚本的执行通常可以采用以下几种方式 bash /path/to/script-name 或 /bin/bash /path/to/script-name (强烈推荐使用) /path/to/script-name 或 ./script-name (当前路径下执行脚本) source script-name 或 . script-name (注意“.“点号后面有空格) 执行方式说明: 脚本文件本身没有可执行权限或者脚本首行没有命令解释器时使用的方法,我们推荐用bash执行。 使用频率:☆☆☆☆☆ 脚本文件具有可执行权限时使用。 使用频率:☆☆☆☆ 使用source或者.点号,加载shell脚本文件内容,使shell脚本内容环境和当前用户环境一致。 使用频率:☆☆☆ 使用场景:环境一致性 1. source -- 当前用户的下 , 并且不启动子进程运行shell(就相当于终端桥命令) 2. ./ -- 启动子进程 ,但是进程的名称为(所执行脚本名称) 3. 、bash 或者 /bin/bash -- 启动子进程并且 名称为 (bash) 来源: https://www.cnblogs.com/chaowolf/p/11681816.html

22 SHELL 获取当前路径

久未见 提交于 2019-12-01 09:56:26
常见的一种误区,是使用 pwd 命令,该命令的作用是“print name of current/working directory”,这才是此命令的真实含义,当前的工作目录,这里没有任何意思说明,这个目录就是脚本存放的目录。所以,这是不对的。你可以试试 bash shell/a.sh,a.sh 内容是 pwd,你会发现,显示的是执行命令的路径 /home/june,并不是 a.sh 所在路径:/home/june/shell/a.sh 另一个误人子弟的答案,是 $0,这个也是不对的,这个$0是Bash环境下的特殊变量,其真实含义是: Expands to the name of the shell or shell script. This is set at shell initialization. If bash is invoked with a file of commands, $0 is set to the name of that file. If bash is started with the -c option, then $0 is set to the first argument after the string to be executed, if one is present. Otherwise, it is set to the file

shell脚本中变量接受hive语句的返回值问题

妖精的绣舞 提交于 2019-12-01 09:39:43
问题 20190916 有时在写shell脚本时,脚本变量可以接受hive语句的返回值 #!bin/bash sql1=" use mydatabase; select min(colmun) from table_name; " var1=`hive -S -e "${sql1}"` sql2=" use mydatabase; select cast(1 as tinyint) as flag; " var2=`hive -S -e "${sql2}"` 但有时, hive -S -e "sql" 语句执行完后,有时候执行会包含 WARN 开头的日志: WARN: The method class org.apache.commons.logging.impl.SLF4JLogFactory#release() was invoked. WARN: Please see http://www.slf4j.org/codes.html#release for an explanation. 此时变量 var 接受的返回值里含有这几行 WARN... 语句,下面几种解决方法。\ 方法1 var=`hive -e "${sql}" | grep -v "WARN"` 方法2 添加 export HIVE_SKIP_SPARK_ASSEMBLY=true; 到 /etc/profile

shell命令执行结果$?

人走茶凉 提交于 2019-12-01 09:39:35
shell命令执行结果 $? 20190929 例子 在shell中,有时我们需要知道上调命令(或者上条函数)是否执行成功,可以用 $? 命令 #!/bin/bash # 无参 num1=3 num2=4 sql="select ${num1} * ${num2};" sss=`hive -e "${sql}" | grep -v "WARN"` let flag=$? echo $flag if [[ $flag = 0 ]] then echo "succeed!" echo "${sss}" else echo "filed!" fi 输出 0 succeed! 12 注意:在shell中,成功返回的是 0 参考 参考1-shell中的 $0 $n $# $* $@ $? $$ 参考2-shell脚本中判断上一个命令是否执行成功 来源: https://www.cnblogs.com/damahuhu/p/11675525.html

shell 参数个数

拥有回忆 提交于 2019-12-01 09:39:12
shell 参数个数 20190904 参数个数 在写shell脚本的时候,会有这样的需求:根据传入的参数个数来选择相应的操作。 命令 $# 返回出入的参数,但要注意对 $# 的引用范围 测试代码 #!/bin/bash #参数个数命令 $# #date:2018-08-08 date1=$1 date2=$2 let nump1=$# echo "---函数外---"$nump1 function main(){ let nump2=$# echo "---函数内---"$nump2 if [[ $nump1 = 1 ]] then let date2int="${date1:0:4}${date1:5:2}${date1:8:2}" echo $date2int exit fi echo $date1 } main 1、条件判断为: if [[ $nump1 = 1 ]] $ sh test_num_parameter.sh 2018-08-09 输出 ---函数外---1 ---函数内---0 20180809 2、条件判断为: if [[ $nump2 = 1 ]] $ sh test_num_parameter.sh 2019-01-01 输出 ---函数外---1 ---函数内---0 2019-01-01 $# 的作用域只在最外层 参考 博客园-参考1 博客园-参考2

shell简单命令

Deadly 提交于 2019-12-01 09:39:10
shell简单命令 20190904 编码转换 iconv iconv -f GB2312 -t UTF-8 file1 -o file2 参考: iconv命令详解 参数个数 $# if [ $# -eq 0 ] 参数个数的作用范围:详见 CSDN- $# 的作用范围 函数 date mydate='2018-05-19' date - d 'now' #当前时间 date "+%Y-%m-%d %H:%M:%S" #当前时间 2019-09-10 00:00:00 date -d "$mydate" +%Y%m%d #修改格式 20180519 date -d "$mydate -1 year" +%Y-%m-%d #前一年 2017-05-19 参考: 博客园-参考1 博客园-参考2 当前文件脚本路径 path=$(cd $(dirname $0); pwd) 参考: CSDN-参考1 简书-参考2 查看文件编码 vi + :set fileencoding vi filename :set fileencoding 参考: 博客园-参考1 字符转数字 let let s=$numstr 参考: 博客园-参考1 博客园-参考2 字符替换 b=${a/123/321}; # 将${a}里的第一个123替换为321 b=${a//123/321}; # 将${a

Shell 编程 正则表达式

蓝咒 提交于 2019-12-01 09:34:48
本篇主要写一些 shell 脚本正则表达式的使用基础。 概述 正则表达式分为基础正则表达式(Regular Expression)与扩展正则表达式(Extended Regular Expression)。 它不是一个工具程序,而是一个字符串处理的标准依据,是使用单个字符串搜索、匹配一系列符合某个语法规则的字符串。 它由普通字符(a~z)以及特殊字符(元字符)组成。 linux 文本处理工具 文本处理工具 基础正则表达式 扩展正则表达式 vi编辑器 支持 / grep 支持 / egrep 支持 支持 sed 支持 / awk 支持 支持 基础正则表达式 基础正则表达式常见元字符 ^ :匹配输入字符串的开始位置。在方括号表达式中使用,表示不包含该字符集合。要匹配 ^ 字符本身,使用 \^ $ :匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 \n 或 \r 。要匹配 $ 字符本身,请使用 \$ . :匹配除 \r\n 之外的任何单个字符 \ :将下一个字符标记为特殊字符、原义字符、向后引用、八进制转义符。例如, n 匹配字符 n 。 \n 匹配换行符。序列 \\ 匹配 \ ,而 \( 则匹配 ( * :匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \* [] :字符集合。匹配所包含的任意一个字符。例如, [abc]

shell 下执行mysql 命令

爱⌒轻易说出口 提交于 2019-12-01 08:21:15
【MySQL】常用拼接语句 前言: 在MySQL中 CONCAT ()函数用于将多个字符串连接成一个字符串,利用此函数我们可以将原来一步无法得到的sql拼接出来,在工作中也许会方便很多,下面主要介绍下几个常用的场景。 注: 适用于5.7版本 低版本可能稍许不同。 1.拼接查询所有用户 mysql">SELECT DISTINCT CONCAT( 'User: \'', USER, '\'@\'', HOST, '\';' ) AS QUERY FROM mysql.USER; # 当拼接字符串中出现'时 需使用\转义符 2.拼接DROP table SELECT CONCAT( 'DROP table ', TABLE_NAME, ';' ) FROM information_schema. TABLES WHERE TABLE_SCHEMA = 'test'; 3.拼接kill连接 SELECT concat('KILL ', id, ';') FROM information_schema. PROCESSLIST WHERE STATE LIKE 'Creating sort index'; 4.拼接创建 数据库 语句 SELECT CONCAT( 'create database ', '`', SCHEMA_NAME, '`', ' DEFAULT CHARACTER

【shell脚本】点名器===randomName.sh

我只是一个虾纸丫 提交于 2019-12-01 08:06:35
随机点名,从name.txt文件中读取名字 [root@VM_0_10_centos shellScript]# cat randowName.sh #!/bin/bash # 随机点名器 # 需提前准备name.txt文件,里面写上名字,每一行一个 while : do line=`cat name.txt | wc -l` num=$[RANDOM%line+1] sed -n "${num}p" name.txt sleep 0.2 clear done 来源: https://www.cnblogs.com/HeiDi-BoKe/p/11671934.html

Linux shell - `dirname $0` 定位到运行脚本的相对位置

夙愿已清 提交于 2019-12-01 08:05:25
【参考文章】: Linux shell - `dirname $0` 定位到运行脚本的相对位置 【参考文章】: Linux命令之basename使用 1. dirname $0   获取脚本文件所在的目录信息      dirname.sh :   注意 dirname 是在 反引号里面。Tab键上面那个键。      hello.txt :      执行结果如下    2. basename   basename string suffix   输出指定字符串中最后一个 / 之后的字符,不包括 / ,如果执行了 suffix ,则删除最后一个 suffix 字符    #!/bin/sh a=` basename $0` echo $a # 输出当前脚本的文件名 echo "`basename $0`" # 输出最后一个 / 之后的字符串,不包含最后一个 / basename `dirname $0`/dirname.sh # 输出最后一个 / 之后的字符串,不包含最后一个 /,并删除最后一个sh字符 basename `dirname $0`/dirname.sh sh # 验证是否删除最后一个指定的字符 basename /1a/2a/3a.a a 执行结果: 来源: https://www.cnblogs.com/virgosnail/p/11671891.html