Linux Shell零基础案例实战(二)

本期内容:
1 Linux Shell的变量
2 Linux Shell的控制结构
3 Linux Shell的函数
4 Linux Shell在大数据中的应用
三、shell中变量和引用实战
1、变量可以分为三种类型,
    1)本地变量:只在当前shell生命周期内有效;
    2)环境变量:指在用户登录到注销对于所有的编辑器、脚本、进程都有效;
    3)位置参数:主要适用于shell脚本传递参数,例如:./spark-shell --master spark://Master:7077

下面代码为:启动spark所有进程的脚本:start-all.sh

# Load the Spark configuration
. "${SPARK_HOME}/sbin/spark-config.sh"
# Start Master
"${SPARK_HOME}/sbin"/start-master.sh $TACHYON_STR
# Start Workers
"${SPARK_HOME}/sbin"/start-slaves.sh $TACHYON_STR
($:变量替换符号,即用当前的具体的值替换)
2、${variablename}会具体提取出变量的内容,当然可以把{}去掉,例如:$HADOOP_CONF_DIR来提取出Hadoop配置文件具体所在的路径的值;
3、变量赋值的时候“=”两边不能有空格,有空格会被认为执行Commod;
root@Master:~# variable2 = "I"
variable2: command not found
root@Master:~# TACHYON_STR=""
root@Master:~# TACHYON_STR= ""
: command not found
root@Master:~# i=1
如果访问变量,使用echo $variable_name 打印变量,例如下面:
oot@Master:~# spark="I Love U"
root@Master:~# echo $spark
I Love U
root@Master:~# 
4、在shell中编写下面例子:
#!/bin/bash
#dingyi
a=100
let a+=10
echo "a=$a"  #
将其授权并执行:
root@Master:~# vim compute.sh
root@Master:~# chmod u+x compute.sh 
root@Master:~# ./compute.sh 
a=110
root@Master:~# 
强制把变量b变成整数类型:
b=xx08
echo "b=$b"
declare -i b
执行如下(可以看到对字符串类型变量b强制转换没有生效):
root@Master:~# ./compute.sh 
a=110
b=xx08
root@Master:~# 
5、环境变量(定义环境变量 后,希望别的用户使用,需要导出环境变量)
    使用export关键字把变量变成环境变量,例如:
export JAVA_HOME=/usr/lib/java/jdk1.7.0_71
export JRE_HOME=${JAVA_HOME}/jre
export SCALA_HOME=/usr/lib/scala/scala-2.10.4
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.6.0
export SPARK_HOME=/usr/local/spark/spark-1.6.0-bin-hadoop2.6
export ZOOKEEPER_HOME=/usr/local/zookeeper/zookeeper-3.4.6
export CLASS_PATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
可以使用”env“命令查看系统中的环境变量,清除环境变量使用unset:
root@Master:~# env
XDG_VTNR=7
LC_PAPER=zh_CN.UTF-8
LC_ADDRESS=zh_CN.UTF-8
XDG_SESSION_ID=c2
SPARK_HOME=/usr/local/spark/spark-1.6.0-bin-hadoop2.6
XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/root
SELINUX_INIT=YES
LC_MONETARY=zh_CN.UTF-8
CLUTTER_IM_MODULE=xim
SESSION=ubuntu
GPG_AGENT_INFO=/run/user/0/keyring-T8H0hV/gpg:0:1
TERM=xterm
VTE_VERSION=3409
使用echo $文件名变量访问pwd目录:
root@Master:~# cd /usr/kongxr/download/
root@Master:/usr/kongxr/download# pwd
/usr/kongxr/download
root@Master:/usr/kongxr/download# echo $PWD
/usr/kongxr/download
root@Master:/usr/kongxr/download# 
root@Master:/usr/kongxr/download# echo $OLDPWD
/root
root@Master:/usr/kongxr/download# 
6、系统中核心的配置文件(常用的一些配置文件.bashrc,bash_profile,bash_logout),修改了系统文件后一般使用source使其立即生效。
7、位置参数:主要用于从命理行像shell脚本传递参数
         具体而言,$1代表传入shell的第一个参数,$2代表传入的第二个参数,如果要代表全部参数,使用 $* 或者$@表示从第一个位置开始的全部参数,例如:在spark-shell中:
if [ -z "${SPARK_HOME}" ]; then
  export SPARK_HOME="$(cd "`dirname "$0"`"/..; pwd)"
fi
    stty -icanon min 1 -echo > /dev/null 2>&1
    export SPARK_SUBMIT_OPTS="$SPARK_SUBMIT_OPTS -Djline.terminal=unix"
    "${SPARK_HOME}"/bin/spark-submit --class org.apache.spark.repl.Main --name "Spark shell" "$@"
    stty icanon echo > /dev/null 2>&1
  else
    export SPARK_SUBMIT_OPTS
    "${SPARK_HOME}"/bin/spark-submit --class org.apache.spark.repl.Main --name "Spark shell" "$@"
  fi
}
编写简单脚本说明:
$@:代表传递所有的参数(同 $*  
$#:代表传到脚本中的参数的数量;
$$:脚本运行的进程号;
$?:代表命令退出的状态,0表示没有错误,非0表示有错误:
Linux Shell零基础案例实战(二)_第1张图片

注:-ge代表>=
8、命令替换:将命令的输出作为值赋值给某个变量;
# Enter posix mode for bash
set -o posix
if [ -z "${SPARK_HOME}" ]; then
  export SPARK_HOME="$(cd "`dirname "$0"`"/..; pwd)"
fi
export _SPARK_CMD_USAGE="Usage: ./bin/spark-shell [options]"
    例如: export SPARK_HOME="$(cd "`dirname "$0"`"/..; pwd)" 实际上使用pwd获得的值来取代dirname,并且如果使用${}则会对其进行实际求值,对我们的例子来说,pwd的值为“ /usr/local/spark/spark-1.6.0-bin-hadoop2.6/bin ” ,$0代表当前文件名称Spark-shell










你可能感兴趣的:(Linux,shell)