shell知识
Shell解析器
Linux提供的Shell解析器有:
(base) yanziming@server20:~/vicent/shell$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh# 常用
/bin/bash# 常用
/bin/rbash
/bin/dash
/usr/bin/tmux
/usr/bin/screen
/bin/zsh
/usr/bin/zsh
查看系统默认解释器:
(base) yanziming@server20:~/vicent/shell$ echo $SHELL
/bin/bash
Shell脚本入门
脚本以#!/bin/bash
开头,指定解析器
#!/bin/bash
echo "Hello Vicent!"
#echo 表示在终端输出内容
常用脚本执行方式
第一种:不需要可执行权限
1.sh+脚本相对路径 eg: sh *.sh2.sh+脚本绝对路径
3.bash+脚本相对路径
4.bash+脚本绝对路径
第二种:需要可执行权限
首先赋予权限
chmod 777 *.sh
接着执行脚本:
./helloworld.sh#相对路径
#也可以使用绝对路径
Shell中的变量
系统变量
常用的系统变量
$HOME、$PWD、$SHELL、$USER等
变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。(2)等号两侧不能有空格(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。(4)变量的值如果有空格,需要使用双引号或单引号括起来。
# 给变量A赋值
(base) yanziming@server20:~/vicent/shell$ A=8
(base) yanziming@server20:~/vicent/shell$ echo $A
8
# 撤销变量A
(base) yanziming@server20:~/vicent/shell$ unset A
# 静态变量不能被unset,只读变量
(base) yanziming@server20:~/vicent/shell$ readonly B=2
(base) yanziming@server20:~/vicent/shell$ echo $B
2
(base) yanziming@server20:~/vicent/shell$ B=9
bash: B: readonly variable
#变量无法进行数值运算
(base) yanziming@server20:~/vicent/shell$ C=1+2
(base) yanziming@server20:~/vicent/shell$ echo $C
1+2
#变量如果有空格需要用单双引号括起来
(base) yanziming@server20:~/vicent/shell$ D=I love banzhang
Command 'love' not found, but can be installed with:
snap install love # version 11.2+pkg-d332, or
apt install love
See 'snap info love' for additional versions.
(base) yanziming@server20:~/vicent/shell$ D="I love banzhang"
(base) yanziming@server20:~/vicent/shell$ echo $D
I love banzhang
# 使用expot 变量名 将变量提升为全局变量
[atguigu@hadoop101 datas]$ vim helloworld.sh
在helloworld.sh文件中增加echo $B
#!/bin/bash
echo "helloworld"
echo $B
[atguigu@hadoop101 datas]$ ./helloworld.sh
Helloworld
#将B提升为全局变量
[atguigu@hadoop101 datas]$ export B
[atguigu@hadoop101 datas]$ ./helloworld.sh
helloworld
2
特殊变量:$n
$n
(功能描述:n
为数字,$0
代表该脚本名称,$1
-$9
代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}
)
操作实例:
[atguigu@hadoop101 datas]$ touch parameter.sh
[atguigu@hadoop101 datas]$ vim parameter.sh
#!/bin/bash
echo "$0 $1 $2"
[atguigu@hadoop101 datas]$ chmod 777 parameter.sh
[atguigu@hadoop101 datas]$ ./parameter.sh cls xz
./parameter.sh cls xz
特殊变量:$#
$#
(功能描述:获取所有输入参数个数,常用于循环)。
[atguigu@hadoop101 datas]$ vim parameter.sh
#!/bin/bash
echo "$0 $1 $2"
echo $#
[atguigu@hadoop101 datas]$ chmod 777 parameter.sh
[atguigu@hadoop101 datas]$ ./parameter.sh cls xz
parameter.sh cls xz
2
特殊变量:$*
、$@
$*
(功能描述:这个变量代表命令行中所有的参数,$*
把所有的参数看成一个整体)
$@
(功能描述:这个变量也代表命令行中所有的参数,不过$@
把每个参数区分对待)
[atguigu@hadoop101 datas]$ vim parameter.sh
#!/bin/bash
echo "$0 $1 $2"
echo $#
echo $*
echo $@
[atguigu@hadoop101 datas]$ bash parameter.sh 1 2 3
parameter.sh 1 2
3
1 2 3
1 2 3
特殊变量:$?
$?
(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
[atguigu@hadoop101 datas]$ ./helloworld.sh
hello world
[atguigu@hadoop101 datas]$ echo $?
0