介绍Shell脚本在Linux下的使用。
步骤
- shell脚本能提高用户操作和管理员进行系统管理的效率
- 一般步骤
- 编辑器编写脚本程序
shell
做解释程序,非交互地执行脚本,两种执行方式:- 用
sh
命令执行脚本文件 - 给脚本文件添加执行权限,用
./
命令执行
- 用
基本元素
#! /bin/bash
必须的,指出shell的类型- 也可以指定python执行
#
表示注释- 变量
特殊符号
-
注释符
#
除了
#!/bin/bash
里的#
特殊 -
美元符
变量符。与反斜杠转义符相反,使其后的普通字符作为变量名,如$a表示变量a的值。变量字符长度超过1个时,用{}括起来 -
单引号
被引起的字符全部做普通字符
echo ‘my $SHELL’
-
双引号
引号内的内容,除$、转义符\、倒引号`这三个保留特殊功能,其他字符均做普通字符。
-
倒引号(数字1键旁边的那个键)
引号内的字符串当做shell命令行解释执行,得到的结果取代整个倒引号括起来的部分。
-
反斜杠
是转义字符,把特殊字符编程普通字符。但在单引号内的字符都为普通字符。
变量
shell变量可以保存如路径名、文件名或者一个数字。
变量类别
- 本地变量/局部变量
- 只在创建它们的Shell中使用,可以在shell程序内任意使用和修改它们。
- 环境变量
- 可以在创建它们的Shell及其派生出来的任意子程序中使用。有些变量是用户创建的,其他的则是专用的(比如PATH、HOME)。是系统环境的一部分,不必去定义它们,可以在shell程序中使用它们 。还能在shell中加以修改。
- 内部变量
- 由系统提供的。与环境变量不同,但用户不能修改它们。
位置参数
- 在使用函数时,可以使用1、2、3中存放位置变量,$1,$2来访问。
变量声明和使用
变量名=值
- 等号两边不可以有空格,变量区分大小写字母。
- 变量的引用
- $变量名
- ${变量名}
- 清除变量
unset 变量名
- 注意,此时不需要$符号
- 显示本地所有变量
set
- 设置只读变量
randonly 变量名
环境变量
- 环境变量可以在命令行中设置,但用户注销时这些值将丢失
- 环境变量均为大写
- 必须用
export
命令导出 - 显示环境变量
env
- 常见环境变量
HOME
SHELL
PWD
:用户当前工作目录的路径HISTSZIE
:历史命令PATH
:执行文件搜索的路径
配置文件
- 让环境变量的修改在退出shell再次登录仍然有效,需要在配置文件中修改
/etc/profile
- 存放一些全局(共有)变量,不管哪个用户,登录时都会读取该文件。通常设置一些Shell变量
PATH,USER,HOSTNAME
和HISTSIZE
等 - 登录Linux先启动系统配置文件
/etc/profile
,并从/etc/profile.d
目录的配置文件中搜集shell的设置,为系统的每个用户设置环境信息。
- 存放一些全局(共有)变量,不管哪个用户,登录时都会读取该文件。通常设置一些Shell变量
~/.bash_profile
- 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。默认情况下,他设置一些环境变量,执行用户的
.bashrc
文件.
- 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。默认情况下,他设置一些环境变量,执行用户的
~/.bashrc
- 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。同时,会调用
/etc/bashrc
- 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。同时,会调用
/etc/bashrc
- 为每一个运行bash shell的用户执行此文件。当bash shell被打开时,该文件被读取。
- 按照传统,定义的变量如PATH放到
.bash_profile
中,而像别名函数等放在.bashrc
中,但是.bash_profile
先于.bashrc
读取内容,也可全放入.bashrc
中
设置自己的环境变量
- 在
/home/user/.bash_profile
中定义下句,会怎样?- alias la=‘ls –a|grep “.*”’
- user下次再登陆,其shell会自动建立一个别名命令
la
,功能为查看当前目录下名字以.开头的文件。 - 写在
~/.bash_profile
中,需重新登录才能有效。除非运行source .bash_profile
使其立即有效。 - 写在
~/.bashrc
中,则打开新的终端中就有效
tips
- 两种执行方式
- 给文件执行权限,例如
chmod 755 run.sh
- 然后使用
./run.sh
即可运行
- 然后使用
sh
文件名sh run.sh
- 给文件执行权限,例如
- 特殊内部变量
$#
- 传给shell程序的位置参数的数量
$?
- 最后命令的完成码或者在shell程序内部执行的shell程序
$0
- shell程序的名称
$*
- 调用shell程序时所传送的全部参数的单字符串
$n
- 第n个参数
$$
- 本程序的PID
$!
- 上一个命令的PID
一般结构
函数
使用函数(注意,直接写函数名,不用写function
)
#!/bin/bash
#a simple shell script example
#a function
sayhello() {
echo "Enter Your name:"
read name
echo "Hello $name"
}
echo "programme starts here..."
sayhello
echo "programme ends."
变量表达式
-
条件判断命令test
test n1 -参数 n2
可等价于
[ n1 -参数 n2]