简单的shell语法和脚本编写

浅学一下

认识shell

说明:

shell是介于用户和内核之间的一个工具,用户的操作通过shell进行解析,然后传递给内核

shell有两种表现形式:交互式(单步执行),脚本式(文本执行)

我们通常所说的shell编程是脚本式

1.类型:

bash(linux默认),ash,csh,ksh等

环境变量$SHELL 标明了系统使用的shell

/etc/shells 定义了系统可用的shell

2.演示:

hello.sh

1
2
3
4
#! /bin/bash

echo "hello world"

添加可执行权限 chmod +x hello.sh

启动方法

  • 在当前目录:./hello.sh
  • 使用bash执行:bash hello.sh # 无需添加可执行权限

3.书写shell

  1. 指定shell解释器 #! /bin/bash

  2. 注释符号:#

  3. 非常严格的使用习惯

    a=123 # 不带空格

变量

使用形式

1
2
3
4
5
6
7
8
9
#! /bin/bash

name="小明" #定义变量,`=`前后不能有空格
readonly name #声明为只读变量
echo $name #使用变量
name="xxx" #修改变量
unset name #销毁变量
echo "${name}你好" #使用变量,加上{}用于变量名范围

变量类型

本地变量:只在shell脚本内部使用

环境变量:在整个系统中都可使用,通常全部大写,使用最多的是 PATH

修改

​ 系统: /etc/profile

​ 用户:~/.bash_profile

导出

export PATH=$PATH:/root/shell

立即生效

​ source 关键字

​ 例如:

source /etc/profile

​ 用冒号隔开每个目录

位置变量

1
2
3
4
5
6
7
#! /bin/bash
echo $0
echo $1
echo $2
echo $3
echo $4
echo $5
1
2
3
4
5
6
7
8
# 位置变量
$0 #脚本文件名
$1-$9 #执行脚本时传递的参数
# 特殊变量
$* #所有的参数
$# #参数的个数
$? #上次的执行结构,0表示正确,其它表示错误
$@ #所有参数列表

文件包含

形式1

include1.sh

1
2
3
#! /bin/bash

url="www.4399.com"

include2.sh

1
2
3
4
#! /bin/bash

. include1.sh
echo $url

上方的include2.sh通过 .加上文件名指定同级目录下的include1.sh,并且打印了include1的变量

形式2

include2.sh

1
2
3
4
#! /bin/bash

source include1.sh
echo $url

文件包含总结

  • . 文件
  • source 文件

说明:以上两种形式都可以在一个脚本中引用另一个脚本,相当于直接书写在当前文件中

seq,expr

特殊命令

  • seq m n 产生从m到n的整数

  • expr 将表达式进行运算

    ​ expr 2+3 # 结果为5

    ​ expr 2 \ * 3 # 结果为6,\表示转义,直接在符号前面,但是在markdown里面直接加在符号前就不显示了,所有这里我打了一个空格,使用的时候不要加

字符串

符号

双引号:可以使用除 $ ` \ “ 之外的任意字符

单引号:把所有内容原文输出,任何字符都当成普通字符,除了单引号,因为遇到单引号就代表结束了,不解析变量

反引号:表示将其中的字符串当作命令执行

1
2
3
4
# 比如
echo `pwd`

就把pwd执行的结果打印出来了

反斜线:转义特殊字符,如:$ ` \ 等

字符串操作

长度计算:`$