一、SHELL编程的格式
首行shebang机制,指定解释器,这里我们主要使用第一个
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl
二、 SHELL的运行的三种方法
1. 作为可执行程序执行
- 新的脚本都没有可执行权限,所以要先给执行权限。
[root@centos7 test]# chmod a+x aubin.sh
- 先切换到当前路径,或者直接使用绝对路径执行。
[root@centos7 test]# ./aubin.sh
helo world
[root@centos7 test]# /app/test/aubin.sh
helo world
在当前路径执行的话一定要写./aubin.sh
。如果直接写aubin.sh
系统会在PATH路径中搜索aubin.sh
。当然是根本找不到的,系统会报出错误。你也可以将当前路径加入到PATH中,但是这种做法通常会引起其他错误,所以不推荐将当前路径写到PATH中。
2. 指定解释器执行
直接通过bash解释器去调用脚本,因为bash拥有执行权限,所以他去调用脚本时不关心脚本本身有没有执行权限。
[root@centos7 test]# bash aubin.sh #如果bash在PATH中,直接执行即可
helo world
[root@centos7 test]# /bin/bash aubin.sh #否则就需要指定bash指定路径
helo world
3. source执行---不推荐
soruce 就是 点。常用于重新执行刚修改的初始化文件。如/etc/profile , bash_profile, bashrc通过 source命令 在不重启的情况下生效。
[root@centos7 test]# source aubin.sh
4. 三者区别
直接执行需要权限。bash与source不需要权限。
直接执行与bash会在子进程执行脚本,source会在当前进程执行。会影响当前操作环境
三、 检查代码中的语法错误
#检测脚本中的语法错误
bash -n /path/to/some_script
#调试执行
bash -x /path/to/some_script
四、 变量的类型
- 本地变量
仅对当前shell有效,其他进程包括子进程均无效 - 环境变量
仅对当前shell与子进程有效。可以继承,无法回传(子进程-->父进程)。
若父进程注销变量后,子进程无法继承。 - 局部变量
仅对当前shell中局部代码段有效 - 位置变量
$1 $2...... 用于调用脚本时传入的参数
1. 本地变量
- 可以是直接字串; name=“root"
- 变量引用:name="$USER"
- 命令引用:name=`COMMAND` name=$(COMMAND)
- 删除变量:unset name
- " ":弱引用,其中的变量引用会被替换为变量值。
- ' ':强引用,其中的变量引用不会被替换为变量值,而保持原字符串。
2. 环境变量
- 环境变量的定义
export name=VALUE
declare -x name=VALUE
- 查看所有环境变量
[root@centos7 test]env
[root@centos7 test]printenv
[root@centos7 test]export #↓等价
[root@centos7 test]declare -x #↑等价
3. 只读变量与位置变量
- 只读变量的声明与查看
readonly name #声明只读变量
declare -r nam #声明只读变量
readonly –p #查看只读变量
- 位置变量
$1, $2, ...:对应第1、第2等参数,shift [n]换位置
$0: 命令本身
$*: 传递给脚本的所有参数,全部参数合为一个字符串
$@: 传递给脚本的所有参数,每个参数为独立字符串
$#: 传递给脚本的参数的个数
$@ $* 只在被双引号包起来的时候才会有差异
set -- 清空所有位置变量
五、 退出状态
进程使用退出状态来报告成功或失败
- 0 代表成功,1-255代表失败
- $? 变量保存最近的命令退出状态
例子:不查看过程,只查看结果。
ping -c1 -W1 hostdown &> /dev/null
echo $?
网友评论