Linux——Shell

关于shell

什么是shell

Shell(外壳)是一个用C语言编写的程序,是用户使用的Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。

Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

什么是脚本

脚本简单来说就是一条条的文字命令,这些文字命令式可以看到的(可以用记事本打开查看、编辑)。常见的脚本:JavaScript(前端)、VBScript、ASP、JSP、PHP(后端)、SQL(数据库操作语言)、Prel、Shell、Python、Ruby、JavaFX、Lua等。

常见的shell种类

在Linux中有很多类型的Shell,不同的Shell具备不同的功能,Shell还决定了脚本中函数的语法,Linux中默认的shell是/bin/bash,流行的shell还有ash、bash、ksh、csh、zsh等,不同的shell都有自己的特点以及用途。

shell属于内置的脚本

  • 程序

csh

c shell 使用的是类C语法,csh是具有c语言风格的shell,其内部的命令有52个,较为庞大,目前使用的并不多,已经被/bash/tcsh所取代。

ksh

Korn shell 的语法与Bourne shell 相同,同时具备了C shell的易用特点。需要安装的脚本都使用ksh,ksh有42条内部命令,与bash相比有一定的限制。

tcsh

tcsh是csh的增强版,与C shell 完全兼容。

sh

是一个快捷方式,已经被/bin/bash所取代

nologin 指用户不能登录

zsh

目前Linux中最复杂的一种shell,zsh有84个内部命令,使用起来也比较复杂,一般情况下,不会使用该shell、

bash

大多数Linux系统默认使用的shell,bash shell是Bourne shell 的一个免费的版本,它是最早的Unix shell,bash还有一个特点,可以通过help命令来查看帮助,包含的功能几乎可以涵盖shell所具有的功能,所以一般的shell脚本都会指定它为执行路径。

shell入门

编写规范

代码规范:

#!/bin/bash		
# 指定解释器
shell 相关的指令

文件命令规范

文件名.sh

使用流程

  1. 创建.sh文件
  2. 编写shell代码
  3. 执行shell脚本

案例:创建test.sh 实现第一个shell脚本程序,输出hello world

#!/bin/bash
echo "hello world!"
➜ ~  ll test.sh
-rw-r--r-- 1 root root 33 Sep 13 21:51 test.sh
➜ ~ chmod +x test.sh
➜ ~ sudo ./test.sh
hello world!

注意:这里在运行时一定要写成./test.sh ,而不是test.sh ,运行其他的二进制的程序也是一样的。直接写成test.sh ,Linux系统会去PATH里寻找test.sh 而只有/bin ,/sbin, /usr/bin、/usr/sbin 等在PATH中,你的当前目录通常不在PATH里,所以写成test.sh 不会找的命令的,要用./test.sh告诉系统说,就在当前目录下找。

shell进阶


变量

变量的含义

什么是量:就是数据

什么是变量:数据可以发生改变的就是变量

在一个脚本周期内,其值可以发生改变的量就是变量

什么叫做一个脚本周期:一个脚本周期我们可以简单的理解为当前的shell文件。

变量是shell中不可或缺的一部分,也是最基础,最重要的组成部分。

变量的定义与使用

定义形如:class name = “yunwei”

使用形如:echo $class name

变量就是由2个部分组成一个变量名,另外一个部分是变量的值

变量名和变量值的关系?

变量名和变量值是使用和被使用的关系,我们用变量名来使用变量值。

在使用变量的时候一定需要在变量名前面添加一个$符号,该要求在其他语言中也存在的(如php)

变量名的规范

注意:变量名后面的等号左右不能有空格,有可能和你熟悉的编程语言都不一样,同时变量名的使用必须遵循如下规则:

  • 命令只能使用英文字母、数字和下划线,首个字符不能以数字开头
  • 中间不能使用空格,可以使用下划线_
  • 不能使用标点符号
  • 不能使用bash里的关键字
#!/bin/bash
str="hello world!"
echo $str

str后面不能有空间,即=左右不能有空格

双引号能够识别变量,双引号能够实现转义

单引号是不能识别变量,只会原样输出,单引号是不能转义的

定义一个变量 输出当前的时间,要求的格式为 年-月-日 时:分:秒

#!/bin/bash
str=`date +'%F %T'`
echo $str

只读变量

语法:readonly 变量名

接收用户输入

语法: read -p 提示信息 变量名

read -p '请输入需要创建的文件:' filepath

删除变量

语法:unset 变量名

条件判断语句

多个条件

if condition1
then 
	command1
elif condition2
then 
	command2
else 
	command3
fi 

运算符

在shell中,运算符和其他编程脚本语言一样,常见的算术运算符、关系运算符、逻辑运算符、字符串运算符和文件测试运算符等。

算术运算符

  • + 加法 $a+$b
  • - 减法 $a-$b
  • * 乘法 $a\*$b
  • / 除法 $a/$b
  • % 取余 $a%$b
  • = 赋值
  • == 相等 用于比较两个数字,相同则返回True
  • != 不相等,用于比较两个数字,不相同则返回True

注意:条件表达式要放在方括号之间,并且要有空格,例如[$a==$b]是错误的,必须写成[$a == $b]

关系运算符

支持数字,不支持字符串,除非字符串的值是数字。

运算符 说明
-eq 检测两个数是否相等
-ne 检测两个数是否相等,不相等返回true
-qt 检测左边的数是否大于右边的,如果是返回true
-lt 检测左边的数是否小于右边的,如果是返回true
-ge 检测左边的数是否大于等于右边的
-le 检测左边的数是否小于等于右边的

逻辑运算符

常用的逻辑运算符

运算符 说明
! 非运算符,true返回False,false返回true
-o 或运算符
-a 与运算符

字符串运算符

常用的字符串运算符

运算符 说明
= 用于检测两个字符串是否相等
!= 检测两个字符串是否相等,不等true
-z 检测字符串长度是否为0
-n 检测字符串长度是否为0。不为0为true
str 检测字符串是否为空,不空为true

文件测试运算符

用于检测Unix/Linux文件的各种属性

属性检测描述如下:

操作符 说明
-b file 检测文件是否是块设备文件
-c file 检测文件是否是字符设备文件
-d file 检测文件是否是目录
-f file 检测文件是否是普通文件,即不是目录也不是设备文件
-g file 检测文件是否是SGID位
-k file 检测文件是否设置了粘着位
-p file 检测文件是否有管道
-u file 检测文件是否设置了SUID位
-r file 检测文件是否可读
-w file 检测文件是否可写
-x file 检测文件是否可执行
-s file 检测文件是否为空
-e file 检测文件(包括目录)是否存在

shell脚本附带选型

接收可以用$加上选项对应的需要即可。

测试:编写test.sh

#!/bin/bash
echo $0 $1 $2 $3
➜ ./test.sh a b c d
./test.sh a b c
#!/bin/bash
echo $1 $2 $3

./test.sh a b c d
a b c

你可能感兴趣的:(计算机基础)