轻松读懂 Bash Shell 脚本
OsvMackinno
8年前
<h3>开始</h3> <pre> <code class="language-dos">#!/bin/bash # 脚本的第一行叫 shebang,用来告知系统如何执行该脚本 echo Hello, world!</code></pre> <p>chmod a+x script.sh && sh script.sh # && 上一个指令执行成功执行下一个指令</p> <h3>注意事项</h3> <pre> <code class="language-dos">echo 'the first line'; echo 'the second line' # 每一句指令以换行或分号隔开 echo "There are $(ls | wc -l) items here." # 一个指令可用 $( ) 嵌套在另一个指令内部</code></pre> <h3>变量</h3> <pre> <code class="language-dos"># 声明变量 VARIABLE="Some string" # 每个变量的值都是字符串形式。 VARIABLE = "Some string" # 注意空格 Bash 会把 VARIABLE 当做一个指令,由于找不到该指令,因此这里会报错。 # 使用变量 echo $VARIABLE # 如果要使用变量的值, 则要加 $。 echo "$VARIABLE" echo '$VARIABLE' # 注意: ' (单引号) 不会展开变量(即会屏蔽掉变量)。 # 内置变量 echo "上个进程退出状态,成功退出,状态为0,否则,非0: $?" echo "脚本的 PID: $$" echo "参数数目: $#" echo "脚本所有参数: $@" echo "不同位置参数: $1 $2..."</code></pre> <p>环境变量env</p> <ul> <li>PATH 查找可执行文件路径 在/etc/environment 或 /ect/profile 或 ~/.bashrc</li> <li>HOME home 目录</li> <li>PWD 当前目录</li> <li>USER 当前用户</li> <li>UID root的UID=0</li> <li>SHELL 当前shell版本</li> <li>export PATH=$PATH:/new/path/ 设置环境变量 export 当前shell程序都会继承这个变量</li> </ul> <h3>逻辑控制</h3> <pre> <code class="language-dos">#!/bin/bash echo "What's your name?" read NAME # 这里不需要声明新变量 echo Hello, $NAME! if [ $NAME -ne $USER ] then echo "Your name is you username" else echo "Your name isn't you username" fi case "$VARIABLE" in # 列出需要匹配的字符串 0) echo "There is a zero.";; 1) echo "There is a one.";; *) echo "It is not null.";; esac # 注意 ` ` 和 $( ) 等价。seq 返回长度为 3 的数组。 for VARIABLE in `seq 3` do echo "$VARIABLE" done # 在 if 语句中使用 && 和 || 需要多对方括号 if [ $Name == "Steve" ] && [ $Age -eq 15 ] then echo "This will run if $Name is Steve AND $Age is 15." fi # while 循环 while [ true ] do echo "loop body here..." break done</code></pre> <h3>表达式</h3> <p>echo $(( 10 + 5 ))</p> <h3>函数</h3> <pre> <code class="language-dos">function foo () { echo "Arguments work just like script arguments: $@" echo "And: $1 $2..." echo "This is a function" return 0 } bar () { echo "Another way to declare functions!" return 0 }</code></pre> <p>foo "My name is" $NAME # 调用函数</p> <h3>试着读一读</h3> <pre> <code class="language-dos">#!/bin/bash dir=${PWD} bfinder=`echo $PATH|grep $dir` echo $bfinder if [ "$bfinder" == "" ] then echo "export PATH=/$PATH:${dir}" >> ~/.bash_profile export PATH=$PATH:${dir} fi</code></pre> <p>将当前文件地址作为默认路径写入环境变量</p> <p> </p> <p> </p> <p>来自:http://www.jianshu.com/p/6fd715595090</p> <p> </p>