Shell编程

bash是大多数linux系统默认的shell;一般的shell脚本后缀名为.sh

注释符

注释符以#开始,到该行结束

执行脚本

  • 方法1: ./file
  • 方法2: bash file

使用方法1时,需要添加脚本文件的执行权限:

chmod +x file

使用方法2时,原理是将脚本文件作为参数传给shell命令;一般在脚本的第一行指定用哪个程序来编译和执行脚本:

#!bin/bash
#!bin/sh
#!bin/csh

如,在文件test.sh中第一行添加#!bin/bash,则执行时输入命令:

bash test.sh

即可

shell程序的位置参数

由系统提供的参数为位置参数

  • $0 : shell脚本的名字
  • $1-9 : 命令行参数1-9的值
  • $* : 命令行中所有的参数
  • $@ : 命令行中所有的参数
  • $# : 命令行参数的总个数

例如,创建了一个文件cmds.sh,在里面写入:

#!bin/bash
echo program name is $0
echo there are totally $# parameters passed to this program
echo the parameters are $*

则在命令行的输入输出:

user@user-PC:~/Desktop$ bash cmds.sh 1 2 3 4
program name is cmds.sh
there are totally 4 parameters passed to this program
the parameters are 1 2 3 4

那么如果要获取命令行参数第10个及其以后的参数呢?由于没有$10这种写法,可以使用shift命令来实现

shift [N] : 把命令行参数向左移动N个位置

例如,现在输入10个数,要把第10个数输出,可以这样写:

#!bin/bash
echo the parameters are $*
shift
echo the tenth parameter is $9

则运行时的输出输出为:

user@user-PC:~/Desktop$ bash cmds.sh 1 2 3 4 5 6 7 8 9 18
the parameters are 1 2 3 4 5 6 7 8 9 18
the tenth parameter is 18

变量

变量的声明

bash变量不一定要声明,但有些特殊类型的变量必须要声明

declare [options] [name=value]

常用options:

  • -a : 声明name为数组
  • -f : 声明name为函数
  • -i : 声明name为整数
  • -r : 声明name是只读的变量
  • -x : 表明name为全局变量

变量的赋值

name=value

=前后没有空格,如果一个值包含空格,则必须将其包括在括号中

例如:

user@user-PC:~/Desktop$ d=hello world
bash: world: 未找到命令
user@user-PC:~/Desktop$ d=(hello world)
user@user-PC:~/Desktop$ echo $d
hello

变量的引用

可以在变量前加上$符引用变量

引号和反斜线的使用

单引号:不允许有变量替换

双引号:允许使用$符进行变量替换

反斜线\:除去字符的特殊含义,按表面意思处理

命令替换

一个命令被包括在一对括号里并在括号前加上$,或者被包括在反引号``里的时候,shell把它替换为这个命令的输出结果

例如

command=$(ls)  #或者command=`ls`
user@userf-PC:~/Desktop$ echo $command
cmds.sh test test.sh 新建文本.sh 新建文件夹

控制结构语句

顺序结构语句

按语句从上往下依次执行

条件语句

if expression
then
......
elif expression
then
......
else
......
fi

其中,expression为表达式