一起学习Shell脚本
Posted ItStar
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起学习Shell脚本相关的知识,希望对你有一定的参考价值。
什么是shell脚本?
我们的自定义脚本建议都放在/user/local/sbin/目录下边,这样做是为了以后更好管理文档,也让以后接管你工作的同事知道脚本放在哪里。
我们的shell脚本文件要将其设置为.sh文件。这样做的目的是为了让别人一看就知道这是一个shell脚本。
创建一个文件:
vi shellTest.sh
编写shell脚本
#!/bin/bash
echo "hello World" #这是一条输出语句
第一行中的#是一个约定标记,他告诉系统这个脚本需要什么解释器来执行,后面的/bin/bash就是指明了解释器的具体位置。
第二行echo命令用于向标准输出文件(Standard Output,stdout,一般就是指显示器)输出文本。在.sh文件中使用命令与在终端直接输入命令的效果是一样的。
第二行的#及其后面的内容是注释。(shell中除了开头的#!不是注释,其他的#都是注释)
$ #$加变量名代表引用这个变量$0 #Shell本身的文件名$1~$n #添加到Shell的各参数值。$1是第1参数、$2是第2参数…。$# #是传给脚本的参数个数. #如果使用” . "执行,则程序继承当前shell中的环境变量,同时,若在程序中改变了当前shell中的环境变量,则当前shell中该环境变量的值也会改变另外一个区别点在于, “ ./ "只能用于拥有执行权限的文件, 而 ” . " 则可以暂时提升执行权限if *** fi #判断语句类似于Java中if{}-f #判断给定的是不是文件case *** in *** esac #类似java中的caseshift #命令表示参数向左偏移,后面可跟数字(数字大小在参数个数范围内)
#!/usr/bin/env bash
bin=`dirname "${BASH_SOURCE-$0}"`
bin=`cd "$bin"; pwd` #bin中存储当前脚本所在路径
DEFAULT_LIBEXEC_DIR="$bin"/../libexec
#获取HADOOP_LIBEXEC_DIR路径,如果系统环境变量已经配置则用环境变量中路径,否则用获取到的默认的路径
HADOOP_LIBEXEC_DIR=${HADOOP_LIBEXEC_DIR:-$DEFAULT_LIBEXEC_DIR}
. $HADOOP_LIBEXEC_DIR/hadoop-config.sh
# start hdfs daemons if hdfs is present
if [ -f "${HADOOP_HDFS_HOME}"/sbin/start-dfs.sh ]; then
"${HADOOP_HDFS_HOME}"/sbin/start-dfs.sh --config $HADOOP_CONF_DIR
fi
# start yarn daemons if yarn is present
if [ -f "${HADOOP_YARN_HOME}"/sbin/start-yarn.sh ]; then
"${HADOOP_YARN_HOME}"/sbin/start-yarn.sh --config $HADOOP_CONF_DIR
fi
${HADOOP_HOME}/libexec
第五行为HADOOP_LIBEXEC_DIR变量三元赋值。如果HADOOP_LIBEXEC_DIR为空或者环境变量没有配置,就赋值默认的绝对路径,为下一步执行该目录下面的脚本做准备。
${HADOOP_HOME}/libexec/hadoop-config.sh
如果使用" ./ " 执行,可以理解为程序运行在一个全新的shell中不继承当前shell的环境变量的值同时若在程序中改变了当前shell中的环境变量(不使用export)则当前shell的环境变量值不变。如果使用" . "执行,则程序继承当前shell中的环境变量同时,若在程序中改变了当前shell中的环境变量则当前shell中该环境变量的值也会改变另外一个区别点在于" ./ "只能用于拥有执行权限的文件而 " . "则可以暂时提升执行权限。
#!/usr/bin/env bash# Start hadoop dfs daemons. # Optinally upgrade or rollback dfs state. # Run this on master node. usage="Usage: start-dfs.sh [-upgrade|-rollback]" #定义usage变量,即start-dfs.sh的使用说明,在后面的内容可以看到,当参数输入错误时,会打印该消息 bin=`dirname "$0"` bin=`cd "$bin"; pwd` . "$bin"/hadoop-config.sh # get arguments if [ $# -ge 1 ]; then nameStartOpt=$1 shift case $nameStartOpt in (-upgrade) ;; (-rollback) dataStartOpt=$nameStartOpt ;; (*) echo $usage exit 1 ;; esac fi # start dfs daemons # start namenode after datanodes, to minimize time namenode is up w/o data # note: datanodes will log connection errors until namenode starts "$bin"/hadoop-daemon.sh --config $HADOOP_CONF_DIR start namenode $nameStartOpt "$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR start datanode $dataStartOpt "$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR --hosts masters start secondarynamenode
以上是关于一起学习Shell脚本的主要内容,如果未能解决你的问题,请参考以下文章