查看系统中所有的 shell 解释器

  1. $ cat /etc/shells
  2. /bin/sh
  3. /bin/bash
  4. /sbin/nologin
  5. /usr/bin/sh
  6. /usr/bin/bash
  7. /usr/sbin/nologin
  8. /bin/tcsh
  9. /bin/csh

shell 基础

变量

声明变量直接赋值即可,通过 $var 引用一个变量,比如:

  1. name=quanzaiyu
  2. $ echo $name
  3. quanzaiyu

命令结果

使用 $(command) 引用命令执行的结果,比如:

  1. $ echo $(pwd)
  2. /home

使用 command 也是引用命令执行的结果,比如:

  1. $ echo `pwd`
  2. /home

逻辑连接

使用一些逻辑运算符执行多条命令,比如:

  1. $ echo 123 && echo 456
  2. 123
  3. 456
  4. $ lll && echo ok
  5. bash: lll: 未找到命令...
  6. $ lll || echo ok
  7. bash: lll: 未找到命令...
  8. ok

分支结构

if 条件:

  1. $ vim if.sh
  2. read -p 'Please enter a:' a
  3. if [ $a == 5 ]
  4. then
  5. echo 5
  6. else
  7. echo !5
  8. fi
  9. $ sh for.sh
  10. Please enter a:5
  11. 5
  12. $ sh for.sh
  13. Please enter a:1
  14. !5

循环结构

for 循环:

  1. $ vim for.sh
  2. for i in {1..3};
  3. do echo hello $i;
  4. done;
  5. $ sh for.sh
  6. hello 1
  7. hello 2
  8. hello 3

while 循环:

  1. $ vim while.sh
  2. a=1
  3. while [ $a -eq 1 ]
  4. do echo hello world!
  5. a+=1
  6. done
  7. $ sh while.sh
  8. hello world!
  1. $ vim while.sh
  2. a=1
  3. while [ $a -le 5 ]
  4. do echo hello world!
  5. a=$((a+1))
  6. done
  7. $ sh while.sh
  8. hello world!
  9. hello world!
  10. hello world!
  11. hello world!
  12. hello world!

shell 脚本编写

一个简单的 shell 脚本格式如下:

  1. #!/bin/bash
  2. echo hello world!

解释器的区别

文件的第一句为声明执行器路径,不同的执行器可能产生不同的结果

  • #!/bin/sh 当某行代码出错时,不继续往下解释,等价于 #!/bin/bash --posix
  • #!/bin/bash 忽略出错的行继续解释代码