[关闭]
@sangyy 2015-09-05T00:14:55.000000Z 字数 1908 阅读 1396

Shell Script Quick Guide In

compiler2015


简介

Linux/Unix的用户通常使用shell来工作。shell有两种执行方式:Interactive(交互式:在终端下用户每输入一条指令,shell就执行一条)和Batch(批处理:将多条指令写入脚本文件中,调用shell一次执行所有指令)。
在课程实验中有多处要用到shell script,建议同学们使用它来调试,提交程序时将测试步骤写入脚本中。

Hello World!

新建一个文件hello.sh,输入以下内容:

  1. #!/bin/bash
  2. echo "Hello World!"
  3. # I will print Hello World!

其中第一行指明该文件该使用/bin/bash执行,第二行输出一个字符串。第三行是注释,所有的注释均以#开头。
我们可用两种方法执行它:

  1. bash hello.sh

或者

  1. chmod +x hello.sh
  2. ./hello.sh

chmod赋予文件可执行权限,./hello.sh执行该文件,系统会根据文件第一行指明的/bin/bash来执行它。

Variables

var.sh

  1. var=1
  2. str=water
  3. echo $var
  4. echo "I like ${str}melon"

给变量赋值时注意等号两边不能有空格。使用变量时要在前面加$符。
$str${str}效果是一样的,花括号的作用是标注变量名的边界。

" and '

在shell中,'$str'是强引用,引号中的变量名不会替换。而使用"$str"则会替换变量名。

Special Variables

arg.sh

  1. echo "I received $# parameters"
  2. echo "They are: $@"
  3. echo "The file name is: $0"
  4. echo "The first parameter is: $1"

执行bash arg.sh abc 123 hello
其中$#为参数个数,$@为所有参数($*有类似功能,但稍有区别),$0为文件名,$1为第一个参数,依次类推。参数超过10个时要用${10}而不是$10

if ... else

if.sh

  1. a=hello
  2. b=hello
  3. c=hi
  4. # if
  5. if [ $a = $b ]
  6. then
  7. echo "a==b"
  8. fi
  9. # if else
  10. if [ $a != $b ]
  11. then
  12. echo "a!=b"
  13. else
  14. echo "a==b"
  15. fi
  16. # if elif
  17. if [ $a != $b ]
  18. then
  19. echo "a!=b"
  20. elif [ $a != $c ]
  21. then
  22. echo "a!=c"
  23. fi

使用了一些逻辑表达式,总结如下:

Operator Description
1 -eq 2 equal
1 -ne 2 not equal
1 -lt 2 less than
1 -le 2 less or equal
1 -gt 2 greater than
1 -ge 2 greater or equal
! false negation
true -o false or
true -a false and
ab = ac string equal
ab != ac string not equal
-z ab string length is 0
-n ab string length is not 0
-e file file exist
-d file file is directory
-s file file is not empty
-r file file is readable
-w file file is writable
-x file file is executable

for loop

for.sh

  1. for i in 1 2 3 4 5
  2. do
  3. echo $i
  4. done
  5. # or we can use seq
  6. for i in `seq 5`
  7. do
  8. echo $i
  9. done
  10. # loop over all files within a directory
  11. for file in /bin
  12. do
  13. echo $file
  14. done

注:shell会先执行撇号中的指令,然后将执行结果替换到原来位置再继续执行。

while

while.sh

  1. i=1
  2. while [ $i -lt 100 ]
  3. do
  4. i=`expr $i + $i`
  5. done

注:expr会计算参数列表对应的表达式。

Formatting Print

print.sh

  1. #printf (C style)
  2. printf "%d is %s\n%d is %s" 10 "ten" 20 "twenty\n"
  3. #echo -e (with color)
  4. echo -e "\033[0;31m"
  5. echo "[==start==]"
  6. echo -e "\033[0m"
  7. ls ~
  8. echo -e "\033[0;31m"
  9. echo "[===end===]"
  10. echo -e "\033[0m"

参考colors and formatting

More

Unix Shell Tutorial
Linux Shell Scripting Tutorial A Beginner's handbook
Shell教程

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注