SlideShare une entreprise Scribd logo
1  sur  21
Bash Syntax Simplified
Agenda
概述
• 每一门编程语言都有其各自的语法结构和
  代码风格, bash脚本语言也不例外. 这一章简
  要描述bash的语法结构, 包括:
  1, 变量    2, 数组   3, 脚本参数
  4, 运算符   5, 条件判断 6, 循环
  7, 命令替换 8, 算术运算  9, Globbing
  10, 函数
shebang 和 注释
• shebang行指的是脚本文件的第一行, 用于指定执行
  脚本的shell类型, bash脚本的第一行是: #!/bin/bash.
  可以指定shell执行的选项, 常用的有-x选项, 用于打
  印执行了哪些命令, 而不仅仅是结果;
• shell通常使用#标识注释单行, 示例:



 其实shell也可以做到多行注释, 但不常用. 用法如下:
 :<<BLOCK
 ...
 segment
 ...
 BLOCK
变量
• 变量分为:
1, 环境变量
又称为全局变量(global variable), 使用export或者
declare -x命令创建, 示例:
   export VAR=“abc”
   declare -x VAR=“abc”
2, 局部变量
与全局变量不同的是, 局部变量(local variable)的作用域
仅限定在当前的shell脚本中, 不能够被子shell继承. 使
用直接赋值方式创建局部变量:
   variable_name=“var”;
或者使用declare命令:
   declare variable_name=“var”;
两者的区别在于, declare命令创建的变量仅存在于当前的作用域,
比如在函数中使用declare创建的变量尽在该函数中有效; 而直接赋值的方
式则在当前shell环境或者脚本范围内有效, 示例: demo1.sh.
declare
• declare是bash内置的一个命令, 用于声明变量, 该命
  令有如下选项:
  -r 声明一个只读变量, 等同于readonly内置命令;
  -i 声明一个整数变量; 示例:
      declare -i i=5
      i=i+1
      echo $i # output 6
  -a 声明一个数组;
  -x 声明一个环境变量, 等同于export;
  -f 此选项不带参数, 列出当前创建的所有函数.
  示例: demo2.sh
echo
• echo是bash的一个内置命令, 用于打印. 示例:
  echo “Hello world” # 打印Hello World
  常用选项如下:
  -n 打印后不换行
  -e 对字符进行转义, 示例:
  echo -e “hit man” # t输出为tab符
• echo命令可用于打印变量的值, 使用${varname} 或者
  $varname提取变量的值;
• echo参数可以使用双引号或者单引号, 如果是双引号
  则会对$varname进行替换, 单引号则原样输出.
• 示例: demo3.sh
数组
• bash使用declare -a命令创建数组变量, 示例:
 declare -a fruits=(apples pears plums)
  这里创建了一个数组变量fruits, 数组的值使用
  括号包围, 元素使用空格分开.
• 使用元素下标访问数组元素, 从0开始. 比如对
  上面的数组:
  echo ${fruits[0]} # 打印apples
• 数组的遍历, 示例:
  for f in ${fruits[@]}; do
      echo $f
  done
• 示例: demo4.sh
脚本参数
• shell脚本运行时可以指定参数, 可以在shell脚本中使用如
  下方式访问这些参数:
  $@                 参数数组
  $0                 shell脚本名称
  $1 $2 ... $n       第一个, 第二个...参数
  ${#1} ${#2}...     第一个, 第二个...参数的长度
  ${!#}              最后一个参数
  $#                 参数个数
• 参数遍历, 示例:
   for arg in $@; do
       echo $arg
   done
• 示例: demo5.sh
运算符
             - 关系运算符
• 关系运算符
  关系运算符指的是对两个变量进行相等以及大小比较, bash中分
  为整数关系运算和字符串关系运算. 关系运算返回的结果是true
  或者false, 通常是与条件判断语句(if/else)联系在一起的.
  1, 整数关系运算符
  -eq       等于,如:if [ "$a" -eq "$b" ]
  -ne       不等于,如:if [ "$a" -ne "$b" ]
  -gt       大于,如:if [ "$a" -gt "$b" ]
  -ge       大于等于,如:if [ "$a" -ge "$b" ]
  -lt       小于,如:if [ "$a" -lt "$b" ]
  -le       小于等于,如:if [ "$a" -le "$b" ]
  <         小于(需要双括号),如:(("$a" < "$b"))
  <=        小于等于(需要双括号),如:(("$a" <= "$b"))
  >         大于(需要双括号),如:(("$a" > "$b"))
  >=        大于等于(需要双括号),如:(("$a" >= "$b"))
运算符
            - 关系运算符
2, 字符串关系运算符
 ==     等于,如:if [[ "$a" == "$b" ]],与=等价;
        也可以使用单个中括号if [ "$a" == "$b" ]
!=      不等于,如:if [[ "$a" != "$b" ]]
        也可以使用单个中括号if [ "$a" != "$b" ]
<       小于,如: if [[ “$a” < “$b” ]]
>       大于,如: if [[ “$a” > “$b” ]]
-z      字符串是否为空, 如: if [ -z “$a” ]
-n      字符串是否非空, 如: if [ -n “$a” ]
注意: 在进行字符串的比较时, 一个好的习惯是使用双引
号将字符串的内容引用起来.
示例: demo6.sh
运算符
              - 逻辑运算符
• bash提供了逻辑运算符: &&(与) ||(或) 非(!), 逻辑运算符
  可以使用在[[...]]中, 在[...]使用-a代替&&, -o代替||. 示例:
  if [[ "$sa" > "abc" && "$sb" < "xyz" ]]...
  if [ “$a” = “a” ] && [ “$b” = “b” ]...
  if [ "$a" -lt 0 -o "$b" -lt 0 ]...
  if [ ! -z “$sa” ]...
• 示例: demo7.sh
• 逻辑运算符的短路行为
  对于逻辑与, 如果表达式结果为false停止其他表达式的
  执行, 并返回false;
  对于逻辑或,如果表达式结果为true停止其他表达式的执
  行, 并返回true; 示例:
  [ 1 -eq 1 ] || echo 1
  [ 1 -eq 2 ] && echo 1
运算符
               - 文件测试
• bash提供了很多操作符用于测试文件的属
  性, 常用的列举如下:
  [ -f FILE ] FILE存在且是一个普通文件
  [ -d FILE ] FILE存在且是一个目录
  [ -r FILE ] FILE存在且可读
  [ -w FILE ] FILE存在且可写
  [ -x FILE ] FILE存在且可执行
  [ -s FILE ] FILE存在且大小不为0

示例: demo8.sh
条件判断
                             - if
• bash的条件判断分为if语句 和 case语句:
  1, if
  if语句可以有如下格式:
  if ... then ... fi
  if ... then ... else ... fi
  if ... then ... elif .... else ... fi
  另外在每一个条件分支均可以嵌套if语句, 示例:
  count=99
  if [ $count -eq 100 ]; then
          echo "Count is 100"
  else
          if [ $count -gt 100 ]; then
                     echo "Count is greater than 100"
          else
                     echo "Count is less than 100"
          fi
  fi
条件判断
                        - case
• case语句用于作多路分支判断, 格式如下:
 case variable in
      pattern1)
              statements
              ;;
      pattern2)
              statements
              ;;
 esac
需要注意两点:
1, variable与各个分支指定的字符串进行模式匹配; 如果分
   支指定的是*)那么一定可以匹配成功.
2, 如果在某个分支匹配成功, 之后的分支不会被执行;
示例: demo9.sh
循环
                           - for
• bash支持4中循环语法: for/while/until/select, 这里介
  绍常用的for/while循环.
  1, for
  for循环的语法格式如下:
    for variable in word_list
    do
      statements
    done
 示例:
    for file in `ls`
    do
      echo $file
    done
循环
                    - while
2, while
while循环使用如下格式:
  while ...
  do
   statements
  done
示例:
  declare -i a=1
  while [ $a -ne 10 ]; do
         echo $a
         a=a+1
  done
示例: demo10.sh
命令替换
• 经常有这样的需求, 将某个命令的结果赋值给一个变量
  或者对该结果进行某些操作. bash提供了两种实现方式:
  1, 反引号`
  variable=`command`
  2, $()
  variable=$(command)
  区别: 在$()中还可以使用反引号进行命令替换, 而反引
  号中则不能嵌套反引号.
  注意: 如果使用单引号, 则命令替换不会发生; 双引号则可以.
  示例:
  echo “Today is `date`”
  uid=`id -u` && echo $uid
  示例: demo11.sh
算数运算
• bash提供了两种方式实现算术运算:
  1, 使用declare -i声明整型变量, 示例:
   declare -i i=4
   i=$i+4
   echo $i
 2, 使用(()), 示例:
    j=4
   ((j=$j+4))
   echo $j
 示例: demo12.sh
文件globbing
• bash在解析用户输入的命令时, 如果输入的参数中带有*或者?字
  符, 会对该参数进行文件名展开(file globbing); 如果存在匹配该模
  式的文件则展开为所有这些匹配的文件名, 如果不存在使用原来
  的字符串, 示例:
  ls a* # No such file or directory
  touch aa ab
  ls a* # aa ab
• *&?
  *    表示仸意多个字符
  ?    表示一个字符
  注意: 如果需要在字符串中使用*, 则需要使用进行转义, 比如: ls
  a*
• bash只会对未使用引号(包括单引号/双引号)的参数进行扩展, 如
  果使用了引号则扩展不会发生. 示例: ls “a*”
• 示例: demo13.sh
函数
• 使用function关键字声明一个shell函数, 语法格式:
   function func_name() {
     statements
   }
  示例:
      function sayHello() {
             echo “hello guys”
      }
  直接使用函数名调用该函数, 比如: sayHello
• 关于函数需要注意以下几点:
  1, 调用函数时可以传递参数, 与脚本参数类似在函数类
  可以通过$@, $1, $2...引用;
  2, 函数内部使用declare命令声明的变量, 只能在函数内
  被引用;
• 示例: demo14.sh

Contenu connexe

Tendances

Shell(bash) Scripting
Shell(bash) ScriptingShell(bash) Scripting
Shell(bash) ScriptingRobby Lee
 
系統程式 -- 第 4 章 組譯器
系統程式 -- 第 4 章 組譯器系統程式 -- 第 4 章 組譯器
系統程式 -- 第 4 章 組譯器鍾誠 陳鍾誠
 
Ruby 使用手冊 (Part 1)
Ruby 使用手冊 (Part 1)Ruby 使用手冊 (Part 1)
Ruby 使用手冊 (Part 1)Drake Huang
 
Bash入门基础篇
Bash入门基础篇Bash入门基础篇
Bash入门基础篇Zhiyao Pan
 
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VMCompiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VMLi Hsuan Hung
 
系統程式 -- 第 8 章 編譯器
系統程式 -- 第 8 章 編譯器系統程式 -- 第 8 章 編譯器
系統程式 -- 第 8 章 編譯器鍾誠 陳鍾誠
 
10 檔案說明與處理
10 檔案說明與處理10 檔案說明與處理
10 檔案說明與處理shademoon
 
新觀念的VB6教本ch10
新觀念的VB6教本ch10新觀念的VB6教本ch10
新觀念的VB6教本ch10jameschsc
 
Maintainable PHP Source Code
Maintainable PHP Source CodeMaintainable PHP Source Code
Maintainable PHP Source CodeBo-Yi Wu
 
SQL Loader & Bulk Insert 大量資料匯入工具
SQL Loader & Bulk Insert 大量資料匯入工具SQL Loader & Bulk Insert 大量資料匯入工具
SQL Loader & Bulk Insert 大量資料匯入工具HO-HSUN LIN
 
Google protocol buffers简析
Google protocol buffers简析Google protocol buffers简析
Google protocol buffers简析wavefly
 
PHP & MySQL 教學
PHP & MySQL 教學PHP & MySQL 教學
PHP & MySQL 教學Bo-Yi Wu
 
竞赛中C++语言拾遗
竞赛中C++语言拾遗竞赛中C++语言拾遗
竞赛中C++语言拾遗乐群 陈
 

Tendances (17)

Shell(bash) Scripting
Shell(bash) ScriptingShell(bash) Scripting
Shell(bash) Scripting
 
系統程式 -- 第 4 章 組譯器
系統程式 -- 第 4 章 組譯器系統程式 -- 第 4 章 組譯器
系統程式 -- 第 4 章 組譯器
 
Ruby 使用手冊 (Part 1)
Ruby 使用手冊 (Part 1)Ruby 使用手冊 (Part 1)
Ruby 使用手冊 (Part 1)
 
Bash入门基础篇
Bash入门基础篇Bash入门基础篇
Bash入门基础篇
 
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VMCompiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
 
系統程式 -- 第 8 章 編譯器
系統程式 -- 第 8 章 編譯器系統程式 -- 第 8 章 編譯器
系統程式 -- 第 8 章 編譯器
 
10 檔案說明與處理
10 檔案說明與處理10 檔案說明與處理
10 檔案說明與處理
 
新觀念的VB6教本ch10
新觀念的VB6教本ch10新觀念的VB6教本ch10
新觀念的VB6教本ch10
 
Maintainable PHP Source Code
Maintainable PHP Source CodeMaintainable PHP Source Code
Maintainable PHP Source Code
 
SQL Loader & Bulk Insert 大量資料匯入工具
SQL Loader & Bulk Insert 大量資料匯入工具SQL Loader & Bulk Insert 大量資料匯入工具
SQL Loader & Bulk Insert 大量資料匯入工具
 
Work with Vim
Work with VimWork with Vim
Work with Vim
 
PHP
PHPPHP
PHP
 
Wasm text
Wasm textWasm text
Wasm text
 
SCJP ch10
SCJP ch10SCJP ch10
SCJP ch10
 
Google protocol buffers简析
Google protocol buffers简析Google protocol buffers简析
Google protocol buffers简析
 
PHP & MySQL 教學
PHP & MySQL 教學PHP & MySQL 教學
PHP & MySQL 教學
 
竞赛中C++语言拾遗
竞赛中C++语言拾遗竞赛中C++语言拾遗
竞赛中C++语言拾遗
 

En vedette

Condensation Silicone-MSDS
Condensation Silicone-MSDSCondensation Silicone-MSDS
Condensation Silicone-MSDSIris He
 
4, files & folders
4, files & folders4, files & folders
4, files & foldersted-xu
 
9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rmanted-xu
 
5, system admin
5, system admin5, system admin
5, system adminted-xu
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a databaseted-xu
 
SCL Event - Egil Moller Nielsen & Chee Yew Wong - Innovative Delivery Solutio...
SCL Event - Egil Moller Nielsen & Chee Yew Wong - Innovative Delivery Solutio...SCL Event - Egil Moller Nielsen & Chee Yew Wong - Innovative Delivery Solutio...
SCL Event - Egil Moller Nielsen & Chee Yew Wong - Innovative Delivery Solutio...Global Business Intel
 
CIO Event - Bid Winning: How can technology in your business assist your next...
CIO Event - Bid Winning: How can technology in your business assist your next...CIO Event - Bid Winning: How can technology in your business assist your next...
CIO Event - Bid Winning: How can technology in your business assist your next...Global Business Intel
 
Social Media Marketing and Your Targeted Audience
Social Media Marketing and Your Targeted AudienceSocial Media Marketing and Your Targeted Audience
Social Media Marketing and Your Targeted AudienceMoshiur Monty
 
CIO Event - HP - Digital Disruption : How can IT play its part?
CIO Event - HP - Digital Disruption : How can IT play its part?CIO Event - HP - Digital Disruption : How can IT play its part?
CIO Event - HP - Digital Disruption : How can IT play its part? Global Business Intel
 

En vedette (16)

Condensation Silicone-MSDS
Condensation Silicone-MSDSCondensation Silicone-MSDS
Condensation Silicone-MSDS
 
sprite
spritesprite
sprite
 
Наши партнеры
Наши партнерыНаши партнеры
Наши партнеры
 
4, files & folders
4, files & folders4, files & folders
4, files & folders
 
Barn i barnevernet
Barn i barnevernetBarn i barnevernet
Barn i barnevernet
 
lee RESUME
lee RESUMElee RESUME
lee RESUME
 
9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman
 
5, system admin
5, system admin5, system admin
5, system admin
 
fit-PC - Product line overview (v3.0)
fit-PC - Product line overview (v3.0)fit-PC - Product line overview (v3.0)
fit-PC - Product line overview (v3.0)
 
Good company
Good companyGood company
Good company
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a database
 
SCL Event - Egil Moller Nielsen & Chee Yew Wong - Innovative Delivery Solutio...
SCL Event - Egil Moller Nielsen & Chee Yew Wong - Innovative Delivery Solutio...SCL Event - Egil Moller Nielsen & Chee Yew Wong - Innovative Delivery Solutio...
SCL Event - Egil Moller Nielsen & Chee Yew Wong - Innovative Delivery Solutio...
 
CIO Event - Bid Winning: How can technology in your business assist your next...
CIO Event - Bid Winning: How can technology in your business assist your next...CIO Event - Bid Winning: How can technology in your business assist your next...
CIO Event - Bid Winning: How can technology in your business assist your next...
 
Τεστ στα διανύσματα
Τεστ στα διανύσματαΤεστ στα διανύσματα
Τεστ στα διανύσματα
 
Social Media Marketing and Your Targeted Audience
Social Media Marketing and Your Targeted AudienceSocial Media Marketing and Your Targeted Audience
Social Media Marketing and Your Targeted Audience
 
CIO Event - HP - Digital Disruption : How can IT play its part?
CIO Event - HP - Digital Disruption : How can IT play its part?CIO Event - HP - Digital Disruption : How can IT play its part?
CIO Event - HP - Digital Disruption : How can IT play its part?
 

Similaire à 2, bash synax simplified

新北市教師工作坊 -- Bash script programming 介紹
新北市教師工作坊 -- Bash script programming 介紹新北市教師工作坊 -- Bash script programming 介紹
新北市教師工作坊 -- Bash script programming 介紹fweng322
 
Free Marker中文文档
Free Marker中文文档Free Marker中文文档
Free Marker中文文档yiditushe
 
Bash编程之变量高级篇
Bash编程之变量高级篇Bash编程之变量高级篇
Bash编程之变量高级篇Zhiyao Pan
 
系統程式 -- 第 7 章 高階語言
系統程式 -- 第 7 章 高階語言系統程式 -- 第 7 章 高階語言
系統程式 -- 第 7 章 高階語言鍾誠 陳鍾誠
 
3. java basics
3. java basics3. java basics
3. java basicsnetdbncku
 
Bash shell script 教學
Bash shell script 教學Bash shell script 教學
Bash shell script 教學Ming-Sian Lin
 
Diff and Patch command Manual
Diff and Patch command ManualDiff and Patch command Manual
Diff and Patch command Manualtag taglife
 
OpenWebSchool - 02 - PHP Part I
OpenWebSchool - 02 - PHP Part IOpenWebSchool - 02 - PHP Part I
OpenWebSchool - 02 - PHP Part IHung-yu Lin
 
来自 Google 的 r 语言编码风格指南
来自 Google 的 r 语言编码风格指南来自 Google 的 r 语言编码风格指南
来自 Google 的 r 语言编码风格指南学峰 司
 
5, initialization & cleanup
5, initialization & cleanup5, initialization & cleanup
5, initialization & cleanupted-xu
 
Learning python in the motion picture industry by will zhou
Learning python in the motion picture industry   by will zhouLearning python in the motion picture industry   by will zhou
Learning python in the motion picture industry by will zhouWill Zhou
 
第3章算法与控制语句
第3章算法与控制语句第3章算法与控制语句
第3章算法与控制语句summerfeng
 
shell script introduction
shell script introductionshell script introduction
shell script introductionJie Jin
 
Moodle 项目帮助手册:程序编写准则
Moodle 项目帮助手册:程序编写准则Moodle 项目帮助手册:程序编写准则
Moodle 项目帮助手册:程序编写准则YUCHENG HU
 
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫Justin Lin
 
如何学习Bash Shell
如何学习Bash Shell如何学习Bash Shell
如何学习Bash ShellLI Daobing
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向Shengyou Fan
 
Puppet安装测试
Puppet安装测试Puppet安装测试
Puppet安装测试Yiwei Ma
 
Effective linux.1.(commandline)
Effective linux.1.(commandline)Effective linux.1.(commandline)
Effective linux.1.(commandline)wang hongjiang
 

Similaire à 2, bash synax simplified (20)

新北市教師工作坊 -- Bash script programming 介紹
新北市教師工作坊 -- Bash script programming 介紹新北市教師工作坊 -- Bash script programming 介紹
新北市教師工作坊 -- Bash script programming 介紹
 
Free Marker中文文档
Free Marker中文文档Free Marker中文文档
Free Marker中文文档
 
Bash编程之变量高级篇
Bash编程之变量高级篇Bash编程之变量高级篇
Bash编程之变量高级篇
 
系統程式 -- 第 7 章 高階語言
系統程式 -- 第 7 章 高階語言系統程式 -- 第 7 章 高階語言
系統程式 -- 第 7 章 高階語言
 
3. java basics
3. java basics3. java basics
3. java basics
 
Bash shell script 教學
Bash shell script 教學Bash shell script 教學
Bash shell script 教學
 
Diff and Patch command Manual
Diff and Patch command ManualDiff and Patch command Manual
Diff and Patch command Manual
 
OpenWebSchool - 02 - PHP Part I
OpenWebSchool - 02 - PHP Part IOpenWebSchool - 02 - PHP Part I
OpenWebSchool - 02 - PHP Part I
 
来自 Google 的 r 语言编码风格指南
来自 Google 的 r 语言编码风格指南来自 Google 的 r 语言编码风格指南
来自 Google 的 r 语言编码风格指南
 
5, initialization & cleanup
5, initialization & cleanup5, initialization & cleanup
5, initialization & cleanup
 
Learning python in the motion picture industry by will zhou
Learning python in the motion picture industry   by will zhouLearning python in the motion picture industry   by will zhou
Learning python in the motion picture industry by will zhou
 
第3章算法与控制语句
第3章算法与控制语句第3章算法与控制语句
第3章算法与控制语句
 
shell script introduction
shell script introductionshell script introduction
shell script introduction
 
Moodle 项目帮助手册:程序编写准则
Moodle 项目帮助手册:程序编写准则Moodle 项目帮助手册:程序编写准则
Moodle 项目帮助手册:程序编写准则
 
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
 
如何学习Bash Shell
如何学习Bash Shell如何学习Bash Shell
如何学习Bash Shell
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向
 
Puppet安装测试
Puppet安装测试Puppet安装测试
Puppet安装测试
 
Zsh
ZshZsh
Zsh
 
Effective linux.1.(commandline)
Effective linux.1.(commandline)Effective linux.1.(commandline)
Effective linux.1.(commandline)
 

Plus de ted-xu

11, OCP - awr & alert system
11, OCP - awr & alert system11, OCP - awr & alert system
11, OCP - awr & alert systemted-xu
 
10, OCP - flashback
10, OCP - flashback10, OCP - flashback
10, OCP - flashbackted-xu
 
8, OCP - backup with rman
8, OCP - backup with rman8, OCP - backup with rman
8, OCP - backup with rmanted-xu
 
7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recoveryted-xu
 
6, OCP - oracle security
6, OCP - oracle security6, OCP - oracle security
6, OCP - oracle securityted-xu
 
5, OCP - oracle storage
5, OCP - oracle storage5, OCP - oracle storage
5, OCP - oracle storageted-xu
 
4, OCP - oracle networking
4, OCP - oracle networking4, OCP - oracle networking
4, OCP - oracle networkingted-xu
 
3, OCP - instance management
3, OCP - instance management3, OCP - instance management
3, OCP - instance managementted-xu
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture introted-xu
 
12, OCP - performance tuning
12, OCP - performance tuning12, OCP - performance tuning
12, OCP - performance tuningted-xu
 
7, business event system
7, business event system7, business event system
7, business event systemted-xu
 
6, workflow miscellaneous
6, workflow miscellaneous6, workflow miscellaneous
6, workflow miscellaneousted-xu
 
5, workflow function activity
5, workflow function activity5, workflow function activity
5, workflow function activityted-xu
 
4, workflow tables & api
4, workflow tables & api4, workflow tables & api
4, workflow tables & apited-xu
 
3, workflow in ebs
3, workflow in ebs3, workflow in ebs
3, workflow in ebsted-xu
 
2, a simple workflow
2, a simple workflow2, a simple workflow
2, a simple workflowted-xu
 
1, workflow intro
1, workflow intro1, workflow intro
1, workflow introted-xu
 
8, bes tables & api
8, bes tables & api8, bes tables & api
8, bes tables & apited-xu
 
OPM Recipe designer notes
OPM Recipe designer notesOPM Recipe designer notes
OPM Recipe designer notested-xu
 
4, grep
4, grep4, grep
4, grepted-xu
 

Plus de ted-xu (20)

11, OCP - awr & alert system
11, OCP - awr & alert system11, OCP - awr & alert system
11, OCP - awr & alert system
 
10, OCP - flashback
10, OCP - flashback10, OCP - flashback
10, OCP - flashback
 
8, OCP - backup with rman
8, OCP - backup with rman8, OCP - backup with rman
8, OCP - backup with rman
 
7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery
 
6, OCP - oracle security
6, OCP - oracle security6, OCP - oracle security
6, OCP - oracle security
 
5, OCP - oracle storage
5, OCP - oracle storage5, OCP - oracle storage
5, OCP - oracle storage
 
4, OCP - oracle networking
4, OCP - oracle networking4, OCP - oracle networking
4, OCP - oracle networking
 
3, OCP - instance management
3, OCP - instance management3, OCP - instance management
3, OCP - instance management
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture intro
 
12, OCP - performance tuning
12, OCP - performance tuning12, OCP - performance tuning
12, OCP - performance tuning
 
7, business event system
7, business event system7, business event system
7, business event system
 
6, workflow miscellaneous
6, workflow miscellaneous6, workflow miscellaneous
6, workflow miscellaneous
 
5, workflow function activity
5, workflow function activity5, workflow function activity
5, workflow function activity
 
4, workflow tables & api
4, workflow tables & api4, workflow tables & api
4, workflow tables & api
 
3, workflow in ebs
3, workflow in ebs3, workflow in ebs
3, workflow in ebs
 
2, a simple workflow
2, a simple workflow2, a simple workflow
2, a simple workflow
 
1, workflow intro
1, workflow intro1, workflow intro
1, workflow intro
 
8, bes tables & api
8, bes tables & api8, bes tables & api
8, bes tables & api
 
OPM Recipe designer notes
OPM Recipe designer notesOPM Recipe designer notes
OPM Recipe designer notes
 
4, grep
4, grep4, grep
4, grep
 

2, bash synax simplified

  • 3. 概述 • 每一门编程语言都有其各自的语法结构和 代码风格, bash脚本语言也不例外. 这一章简 要描述bash的语法结构, 包括: 1, 变量 2, 数组 3, 脚本参数 4, 运算符 5, 条件判断 6, 循环 7, 命令替换 8, 算术运算 9, Globbing 10, 函数
  • 4. shebang 和 注释 • shebang行指的是脚本文件的第一行, 用于指定执行 脚本的shell类型, bash脚本的第一行是: #!/bin/bash. 可以指定shell执行的选项, 常用的有-x选项, 用于打 印执行了哪些命令, 而不仅仅是结果; • shell通常使用#标识注释单行, 示例: 其实shell也可以做到多行注释, 但不常用. 用法如下: :<<BLOCK ... segment ... BLOCK
  • 5. 变量 • 变量分为: 1, 环境变量 又称为全局变量(global variable), 使用export或者 declare -x命令创建, 示例: export VAR=“abc” declare -x VAR=“abc” 2, 局部变量 与全局变量不同的是, 局部变量(local variable)的作用域 仅限定在当前的shell脚本中, 不能够被子shell继承. 使 用直接赋值方式创建局部变量: variable_name=“var”; 或者使用declare命令: declare variable_name=“var”; 两者的区别在于, declare命令创建的变量仅存在于当前的作用域, 比如在函数中使用declare创建的变量尽在该函数中有效; 而直接赋值的方 式则在当前shell环境或者脚本范围内有效, 示例: demo1.sh.
  • 6. declare • declare是bash内置的一个命令, 用于声明变量, 该命 令有如下选项: -r 声明一个只读变量, 等同于readonly内置命令; -i 声明一个整数变量; 示例: declare -i i=5 i=i+1 echo $i # output 6 -a 声明一个数组; -x 声明一个环境变量, 等同于export; -f 此选项不带参数, 列出当前创建的所有函数. 示例: demo2.sh
  • 7. echo • echo是bash的一个内置命令, 用于打印. 示例: echo “Hello world” # 打印Hello World 常用选项如下: -n 打印后不换行 -e 对字符进行转义, 示例: echo -e “hit man” # t输出为tab符 • echo命令可用于打印变量的值, 使用${varname} 或者 $varname提取变量的值; • echo参数可以使用双引号或者单引号, 如果是双引号 则会对$varname进行替换, 单引号则原样输出. • 示例: demo3.sh
  • 8. 数组 • bash使用declare -a命令创建数组变量, 示例: declare -a fruits=(apples pears plums) 这里创建了一个数组变量fruits, 数组的值使用 括号包围, 元素使用空格分开. • 使用元素下标访问数组元素, 从0开始. 比如对 上面的数组: echo ${fruits[0]} # 打印apples • 数组的遍历, 示例: for f in ${fruits[@]}; do echo $f done • 示例: demo4.sh
  • 9. 脚本参数 • shell脚本运行时可以指定参数, 可以在shell脚本中使用如 下方式访问这些参数: $@ 参数数组 $0 shell脚本名称 $1 $2 ... $n 第一个, 第二个...参数 ${#1} ${#2}... 第一个, 第二个...参数的长度 ${!#} 最后一个参数 $# 参数个数 • 参数遍历, 示例: for arg in $@; do echo $arg done • 示例: demo5.sh
  • 10. 运算符 - 关系运算符 • 关系运算符 关系运算符指的是对两个变量进行相等以及大小比较, bash中分 为整数关系运算和字符串关系运算. 关系运算返回的结果是true 或者false, 通常是与条件判断语句(if/else)联系在一起的. 1, 整数关系运算符 -eq 等于,如:if [ "$a" -eq "$b" ] -ne 不等于,如:if [ "$a" -ne "$b" ] -gt 大于,如:if [ "$a" -gt "$b" ] -ge 大于等于,如:if [ "$a" -ge "$b" ] -lt 小于,如:if [ "$a" -lt "$b" ] -le 小于等于,如:if [ "$a" -le "$b" ] < 小于(需要双括号),如:(("$a" < "$b")) <= 小于等于(需要双括号),如:(("$a" <= "$b")) > 大于(需要双括号),如:(("$a" > "$b")) >= 大于等于(需要双括号),如:(("$a" >= "$b"))
  • 11. 运算符 - 关系运算符 2, 字符串关系运算符 == 等于,如:if [[ "$a" == "$b" ]],与=等价; 也可以使用单个中括号if [ "$a" == "$b" ] != 不等于,如:if [[ "$a" != "$b" ]] 也可以使用单个中括号if [ "$a" != "$b" ] < 小于,如: if [[ “$a” < “$b” ]] > 大于,如: if [[ “$a” > “$b” ]] -z 字符串是否为空, 如: if [ -z “$a” ] -n 字符串是否非空, 如: if [ -n “$a” ] 注意: 在进行字符串的比较时, 一个好的习惯是使用双引 号将字符串的内容引用起来. 示例: demo6.sh
  • 12. 运算符 - 逻辑运算符 • bash提供了逻辑运算符: &&(与) ||(或) 非(!), 逻辑运算符 可以使用在[[...]]中, 在[...]使用-a代替&&, -o代替||. 示例: if [[ "$sa" > "abc" && "$sb" < "xyz" ]]... if [ “$a” = “a” ] && [ “$b” = “b” ]... if [ "$a" -lt 0 -o "$b" -lt 0 ]... if [ ! -z “$sa” ]... • 示例: demo7.sh • 逻辑运算符的短路行为 对于逻辑与, 如果表达式结果为false停止其他表达式的 执行, 并返回false; 对于逻辑或,如果表达式结果为true停止其他表达式的执 行, 并返回true; 示例: [ 1 -eq 1 ] || echo 1 [ 1 -eq 2 ] && echo 1
  • 13. 运算符 - 文件测试 • bash提供了很多操作符用于测试文件的属 性, 常用的列举如下: [ -f FILE ] FILE存在且是一个普通文件 [ -d FILE ] FILE存在且是一个目录 [ -r FILE ] FILE存在且可读 [ -w FILE ] FILE存在且可写 [ -x FILE ] FILE存在且可执行 [ -s FILE ] FILE存在且大小不为0 示例: demo8.sh
  • 14. 条件判断 - if • bash的条件判断分为if语句 和 case语句: 1, if if语句可以有如下格式: if ... then ... fi if ... then ... else ... fi if ... then ... elif .... else ... fi 另外在每一个条件分支均可以嵌套if语句, 示例: count=99 if [ $count -eq 100 ]; then echo "Count is 100" else if [ $count -gt 100 ]; then echo "Count is greater than 100" else echo "Count is less than 100" fi fi
  • 15. 条件判断 - case • case语句用于作多路分支判断, 格式如下: case variable in pattern1) statements ;; pattern2) statements ;; esac 需要注意两点: 1, variable与各个分支指定的字符串进行模式匹配; 如果分 支指定的是*)那么一定可以匹配成功. 2, 如果在某个分支匹配成功, 之后的分支不会被执行; 示例: demo9.sh
  • 16. 循环 - for • bash支持4中循环语法: for/while/until/select, 这里介 绍常用的for/while循环. 1, for for循环的语法格式如下: for variable in word_list do statements done 示例: for file in `ls` do echo $file done
  • 17. 循环 - while 2, while while循环使用如下格式: while ... do statements done 示例: declare -i a=1 while [ $a -ne 10 ]; do echo $a a=a+1 done 示例: demo10.sh
  • 18. 命令替换 • 经常有这样的需求, 将某个命令的结果赋值给一个变量 或者对该结果进行某些操作. bash提供了两种实现方式: 1, 反引号` variable=`command` 2, $() variable=$(command) 区别: 在$()中还可以使用反引号进行命令替换, 而反引 号中则不能嵌套反引号. 注意: 如果使用单引号, 则命令替换不会发生; 双引号则可以. 示例: echo “Today is `date`” uid=`id -u` && echo $uid 示例: demo11.sh
  • 19. 算数运算 • bash提供了两种方式实现算术运算: 1, 使用declare -i声明整型变量, 示例: declare -i i=4 i=$i+4 echo $i 2, 使用(()), 示例: j=4 ((j=$j+4)) echo $j 示例: demo12.sh
  • 20. 文件globbing • bash在解析用户输入的命令时, 如果输入的参数中带有*或者?字 符, 会对该参数进行文件名展开(file globbing); 如果存在匹配该模 式的文件则展开为所有这些匹配的文件名, 如果不存在使用原来 的字符串, 示例: ls a* # No such file or directory touch aa ab ls a* # aa ab • *&? * 表示仸意多个字符 ? 表示一个字符 注意: 如果需要在字符串中使用*, 则需要使用进行转义, 比如: ls a* • bash只会对未使用引号(包括单引号/双引号)的参数进行扩展, 如 果使用了引号则扩展不会发生. 示例: ls “a*” • 示例: demo13.sh
  • 21. 函数 • 使用function关键字声明一个shell函数, 语法格式: function func_name() { statements } 示例: function sayHello() { echo “hello guys” } 直接使用函数名调用该函数, 比如: sayHello • 关于函数需要注意以下几点: 1, 调用函数时可以传递参数, 与脚本参数类似在函数类 可以通过$@, $1, $2...引用; 2, 函数内部使用declare命令声明的变量, 只能在函数内 被引用; • 示例: demo14.sh

Notes de l'éditeur

  1. Note: 为什么这里称为”整数关系运算符”? 因为bash本身是不支持浮点运算的,需要使用awk或者其它工具做浮点操作.