1.什么是shell?
Shell:
位于内核的上层,是上层用户或程序与内核交互的接口程序。
Shell的功能:
1.接受用户输入的命令,将命令解释成内核认识的形式交给它执行,最后再将内核的执行结果解析成用户可以理解的相识反馈给用户。
2.解释性的编程语言,可以编写Shell程序,如同c语言编写程序一样。
3.不同的shell具备不同的功能,shell还决定了脚本中函数的语法,Linux中默认的shell是/bin/bash,流行的shell有ash、bash、ksh、csh、zsh等
2、 第一个简单的脚本
查看一个最简单的脚本:cat scp1
#!/bin/bash
who
date
解释一下这段最简单的脚本:
- #!/bin/bash代表的是这段脚本的解释器,就是下面的语句要由这个解释器去执行
- who命令:查看哪个终端
- date命令:打印当前的日期
执行bash脚本的命令:
- /bin/bash scp1
- 首先赋予用户执行这段脚本的权利:chmod u+x scp1 。 其次用./命令来执行脚本: ./scp1
注意:第二种执行方式要注意,必须在脚本所在目录下才能./scp1,举个例子:如果脚本scp1在当前目录下的一个jiaoben目录下,那么你就要用./jiaoben/scp1命令。
3、shell中的变量
bash与其他程序设计语言一样也采用变量来存放数据,使用变量之前通常并不需要事先为它们做出声明。
默认情况下,所有变量都被看作字符串并以字符串来存储,即使它们被赋值为数值时也是如此。
shell和一些工具程序会在需要时把数值型字符串转换为对应的数值以对它们进行操作
shell中的变量分为两类:
1. 环境变量
2. 用户自定义变量
看一下什么叫做环境变量?
环境变量简单一点说就是一些在整个主机的shell环境中都有效的变量,无论你切换到哪个shell,都可以去用这些环境变量,再比如有一个环境变量stuname=”jin” ,我们可以在脚本中直接去使用这个stuname变量,这就是环境变量的作用范围。
我们可以用env命令来查看环境变量。
看一下比较重要的环境变量:
PATH 决定了shell将到哪些目录中寻找命令或程序
HOME 当前用户主目录
HISTSIZE 历史记录数
LOGNAME 当前用户的登录名
HOSTNAME 指主机的名称
SHELL 前用户Shell类型
LANGUGE 语言相关的环境变量,多语言可以修改此环境变量
MAIL 当前用户的邮件存放目录
PS1 基本提示符,对于root用户是#,对于普通用户是$
PS2 附属提示符,默认是“>”
什么是用户自定义变量?
<1>其实就是用户自己定义的变量,例如:temp=abc
<2>temp变量只在当前shell下使用
<3>用户自定义变量又可以分为全局变量和局部变量
自定义变量的一些用法:
1、变量的声明用法:
1.declare [option] [name]=[value]
-a 声明“name”是一个数组
-f 声明“name”是一个函数
-i 声明“name”是一个整数
-r 声明“name”是只读的变量
-x 表示每一个“name”变量都可以被子进程访问到,称为全局变量
例子:
[root@localhost root]# declare –i age=20
[root@localhost root]# declare –rx OS=LINUX
[root@localhost root]# declare –i
显示所有整型变量;
[root@localhost root]# declare –x
显示所有全局变量;
2.变量的赋值
格式:变量名=值
注意:必须保证等号(=)前后没有空格。
例:
x=6
a="hello world"
3.变量引用
在shell中,可以通过在变量名前加一个$符号来访问它的内容。如:
a="hello world"
echo "A is: $a"
一个变量给另一个变量赋值可以写成:
变量2=$变量1
例如:x=$i
4.单引号、双引号和反斜杠的使用
使用双引号可引用除字符$、`、\外的任意字符或字符串。对大多数的元字符(包括*)都将按字面意思处理。如果用双引号(“”)将值括起来,则允许使用$符对变量进行替换。字符串通常都被放在双引号中,以防止它们被空白字符分开。
如果用单引号‘’将值括起来,则不允许有变量替换,而不对它做shell解释。
反斜杠(\)用来去除某些字符的特殊含义并把它们按字面意思处理,其中就包括$。
例子:
[root@localhost root]# BOOK=”linux book”
[root@localhost root]# echo ’$BOOK’
$BOOK
[root@localhost root]# msg=’ my name is ’
[root@localhost root]# echo $msg
my name is
[root@localhost root]# echo “$msg Linux”
my name is Linux
[root@localhost root]# echo \$msg
$msg