一、shell简介
shell是命令解释程序,它有很多种,例如:sh、bash、ash、dash等。
不同系统可能会使用不同的shell
#查看当前系统使用的shell是哪种
echo $SHELL
#输出,当前系统默认使用bash
/bin/bash
二、shell格式
2.1 新建一个shell脚本文件
#创建hello.sh文件
touch hello.sh
#修改权限
chmod +x hello.sh
#编辑脚本文件
vim hello.sh
向hello.sh添加以下代码
#第一行开始的格式
#!/bin/bash
echo "hello"
2.2 执行脚本方式
#1.查看当前系统有哪些shell
ll /bin/ | grep sh
#输出
-rwxr-xr-x 1 root root 1037528 7月 13 2019 bash*
-rwxr-xr-x 1 root root 253816 8月 14 2019 btrfs-show-super*
-rwxr-xr-x 1 root root 154072 2月 18 2016 dash*
lrwxrwxrwx 1 root root 4 5月 17 20:28 rbash -> bash*
lrwxrwxrwx 1 root root 4 5月 17 20:28 sh -> dash*
lrwxrwxrwx 1 root root 4 5月 17 20:28 sh.distrib -> dash*
lrwxrwxrwx 1 root root 7 3月 7 2019 static-sh -> busybox*
#以上可以看到有bash 和sh 两种
#2.使用不同shell执行
#使用默认shell执行
./hello.sh
#指定使用 bash 执行
bash hello.sh
#指定使用 sh 执行
sh hello.sh
#以上两种都输出
hello
三、变量
3.1系统变量
常用系统变量
#当前主目录
echo $HOME
#当前用户
echo $USER
#默认工作目录
echo $PWD
#默认shell
echo $SHELL
#默认语言
echo $LANGUAGE
echo [$+变量名]
#等价于
printenv 变量名
3.2自定义变量
#定义变量 等号前面不能有空格
#变量名=变量值
MyName="lisi"
#撤销变量
unset MyName
撤销案例
a=2
echo $a
#输出
2
#撤销变量
unset a
echo $a
#输出空行
3.3 特殊变量
3.3.1 $n
传入变量
$n
中的n是指代数字,表示第n个传入变量 第0个变量是脚本名称,其中$1-$9是第1个到第9个变量,十以上需要用大括号包括 ${10}
3.3.2 $#
输入参数个数
$#
是输入参数个数,可以在shell脚本中通过该变量获取。
3.3.3 $*
、$@
输入参数内容
这俩个都是获取所有输入参数,但是$@可以被遍历
#编辑hello.sh
#!/bin/bash
echo '=======$n========='
echo '$0 arg0 is:' $0
echo '$1 arg1 is:' $1
echo '$2 arg2 is:' $2
echo '$3 arg3 is:' $3
echo '$4 arg4 is:' $4
echo '=======$#========='
echo 'args total is:' $#
echo '=======$*========='
echo 'args str is:' $*
echo '=======$@========='
echo 'args str enumable is' $@
#执行命令
./hello.sh arg1 arg2 arg3 arg4 arg5
#输出
=======$n=========
$0 arg0 is: ./hello.sh
$1 arg1 is: arg1
$2 arg2 is: arg2
$3 arg3 is: arg3
$4 arg4 is: arg4
=======$#=========
args total is: 5
=======$*=========
args str is: arg1 arg2 arg3 arg4 arg5
=======$@=========
args str enumable is arg1 arg2 arg3 arg4 arg5
3.3.4 $?
上一条命令执行结果
echo $[1/0]
#输出
-bash: 1/0: 除0 (错误符号是 "0")
echo $?
#输出 1为上一条命令执行有错误,0表示没有错误
1
./hello.sh
#没有报错的话,输出0
0