shell编程


编写第一个shell脚本

脚本内容

#!/bin/bash    脚本声明
#this is my first script    注释信息:描述脚本的用途
#echo hello world!

echo "hello world!"

执行结果

[root@yaoguang ~]# sh first.sh 
hello world!

脚本的执行方式

1、解释器执行 (不需要执行权限)
格式:解释器 脚本
eg:

[root@yaoguang ~]# sh first.sh 
hello world!

解释器查看方式

[root@yaoguang ~]# cat /etc/shells 
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

2、相对路径执行
先给脚本增加执行权限,然后执行
eg:

[root@yaoguang ~]# ./first.sh 
hello world!

3、绝对路径执行
先给脚本增加执行权限,然后执行

[root@yaoguang ~]# pwd
/root
[root@yaoguang ~]# /root/first.sh 
hello world!

4、通过脚本名称执行 (不需要执行权限)

[root@yaoguang ~]# . first.sh 
hello world!

5、通过source命令执行(不需要执行权限)

[root@yaoguang ~]# source first.sh 
hello world!

为了安全,在实际生产环境中最好是使用不需要执行权限的方式去执行shell脚本。

shell变量

变量的含义

便量是可以存放一个可变值的空间,可以通过不同的环境进行改变就是一个可以变的值,默认情况下:在linux中可以将每个shell看成不同的执行环境,所以相同的一个变量名称在不同的变量执行环境中的变量值是不同的。

变量格式

变量名称= 变量值
注意:变量名称和等号之间不能有空格,并且,变量名的命名必须遵循如下规则:

  1. 命名只能用英文字母,数字和下划线,首个字母不能以数字开头
  2. 中间不能有空格,可以使用下划线_
  3. 不能使用标点符号
  4. 不能使用bash里面的关键字

shell变量的分类

  1. 自定义变量
  2. 环境变量:分为局部变量和全局变量
  3. 位置变量
  4. 预定义变量
自定义变量

我们可以在命令行直接给某个变量赋值,然后输出变量
例1:

[root@yaoguang ~]# Linux=8.2
[root@yaoguang ~]# echo $Linux
8.2
[root@yaoguang ~]# linux=8.5
[root@yaoguang ~]# echo $linux
8.5

echo和条用的变量值之间必须要有空格,注意大小写的变量的值是不同的。

环境变量

env:查看当前的全据变量
export:把局部变量变成全局变量

位置变量
参数处理 说明
$# 传递到脚本的参数个数 (此为位置变量,以下为预定义变量)
$* 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数
$- 显示Shell使用的当前选项,与set命令功能相同
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误

比如:

#!/bin/bash

SUN=`expr $1 + $2`
echo "$1 + $2 = $SUN"

运行结果:

[root@yaoguang shell]# ./01.sh 1 2
1 + 2 = 3

加-x可以显示执行的详细过程

[root@yaoguang shell]# sh -x 01.sh 20 30
++ expr 20 + 30
+ SUN=50
+ echo '20 + 30 = 50'
20 + 30 = 50

从程序开始算,$0是01.sh,$1是1,$2是2

使用变量

使用一个定义过的变量,只需要在变量名称前添加$符号即可

your_name="qinjx"
echo $your_name
echo ${your_name}

变量名称外面的花括号{}是可加可不加,加上是为了帮助解释器识别变量的边界。比如以下这种情况:

for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done

如果不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。

推荐给所有变量加上花括号,这是个好的编程习惯