轻松读懂 Bash Shell 脚本

OsvMackinno 6年前
   <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>