shell_0">shell简介
echo $SHELL
/bin/bash
shell_8">创建第一个shell脚本
touch helloworld.sh
vim helloworld.sh
在helloworld.sh 中输入如下内容:
#!/bin/bash
echo “helloworld”
shell_19">执行shell文件
- bash/sh +文件的相对路径或者绝对路径
bash hellowrold.sh
hello,world
sh /root/hellowrold.sh
hello,world
- 在脚本的路径前加上“.”或者source
. hellowrold.sh
hello,world
source hellowrold.sh
hello,world
- 采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)
chmod +x hellowrold.sh
ll hellowrold.sh
# 不能直接写hellowrold.sh ,会被当做命令,无法执行。
./hellowrold.sh
hello,world
/root/hellowrold.sh
hello,world
- bash/sh+脚本、、直接脚本的绝对路径或相对路径执行脚本的方式:是在当前shell 中打开一个子shell 来执行脚本内容,当脚本内容结束,则子shell 关闭,回到父shell 中。
- 脚本路径前加“.”或者source 的方式:可以使脚本内容在当前shell 里执行,而无需打开子shell!这也是为什么我们每次要修改完/etc/profile 文件以后,需要source 一下的原因。
- 开子shell 与不开子shell 的区别就在于,环境变量的继承关系,如在子shell 中设置的
当前变量,父shell 是不可见的。
# 查看当前进程,只打开了一个shell
ps -f
# 再打开一个子shell
bash
ps -f
# 退出子shell
exit
变量
- 可以分为:系统变量、自定义变量
- 又可以分为:全局变量、局部变量
系统变量
全局系统变量
env 可以查看所有全局系统变量
查用的全局系统变量: H O M E 、 HOME、 HOME、PWD、 S H E L L 、 SHELL、 SHELL、USER 等
env|less
所有变量
set 可以查看所有变量
set|less
全局变量在子shell中也可以访问:
自定义变量
-
基本语法
(1)定义变量:变量名=变量值,注意,=号前后不能有空格
(2)撤销变量:unset 变量名
(3)声明静态变量:readonly 变量,注意:不能unset
(4) 导出为全局变量:export 变量名 -
变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建
议大写。
(2)等号两侧不能有空格
(3)在bash 中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号括起来。
a=4
echo $a
4
echo $bb=5
echo $b
5
b="hello,world"
$b
hello,world
撤销变量unset+变量:
unset a
unset b
在子shell里面无法访问创建的变量my_var,说明是局部变量
通过export将局部变量定义为全局变量,但是只在该shell的子shell里有用
新建bash文件,插入如下内容:
如果用bash/sh+文件执行shell文件,需要调用子shell,所以期中的局部变量就没法查看。
readonly +变量名:只读变量,不能修改,不能unset
特殊变量
$n
$n (功能描述:n 为数字,$0 代表该脚本名称,$1- 9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如{10})
touch parameter.sh
vim parameter.sh
执行脚本,可以输出对应的脚本名称和参数
chmod +x parameter.sh
./parameter.sh abc def
$#
$# (功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及
加强脚本的健壮性)。
∗ 、 *、 ∗、@
∗ (功能描述:这个变量代表命令行中所有的参数, ∗ ∗ * (功能描述:这个变量代表命令行中所有的参数,** ∗(功能描述:这个变量代表命令行中所有的参数,∗∗把所有的参数看成一个整体*)
@ (功能描述:这个变量也代表命令行中所有的参数,不过 ∗ ∗ @ (功能描述:这个变量也代表命令行中所有的参数,不过** @(功能描述:这个变量也代表命令行中所有的参数,不过∗∗@把每个参数区分对待**)
编辑parameter.sh文件:
运行文件,输入参数:
./parameter.sh abc def
$?
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一
个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明
上一个命令执行不正确了。)
echo $?
0