linux Shell知识总结(一)

一:shell的基础知识

1.1:Shell是什么?

shell是一个程序,它连接了用户和Linux内核,它可以解释用户输入的命令传递给内核,让用户可以更加方便的使用Linux系统。shell本身并不是内核的一部分,它只是站在内核的基础上编写的一个应用程序。简单来说shell是一个命令解释器,它可以识别用户输入的各种命令,传递到操作系统。

1.1.1echo $SHELL查看shell的默认路径#及当前主机默认的shell

1.1.2:查看当前操作操作系统支持的shell

1.2:Shell脚本的编写规范

脚本:由Shell命令组成的文件,这些命令都是可执行程序的名字,脚本不用编译即可运行。它通过解释器解释运行,所以速度相对来说比较慢。

1.2.1:shell编程注意事项

shell文件名一般使用英文大小写,后缀建议使用.sh结尾

shell编程内容第一行开头:#!/bin/bash(声明当前的shell脚本使用哪个命令解释器去解释)

1.2.2:shell脚本中的注释和风格

单行注释“#”,从该符号开始一直到行尾都属于注释的内容。

多行注释

方法一

方法二

方法三

1.3:Shell脚本的四种执行

方法一:当前目录下./oo.sh 文件需要执行权限

创建文件目录shellk,当下创建oo.sh文件,使用 ./oo.sh命令执行#./的意思是说在当前的工作目录下执行oo.sh。执行后显示没有权限去执行。

更改文件执行权限#chomd +x oo.sh

方法二:绝对路径 /shellk/oo.sh 文件需要执行权限

绝对路径下执行文件权限,同样也要使用chmod +x oo.sh更改文件权限。

方法三:用sh 或bash来执行 bash a.sh 文件不要执行权限 ---建议使用方法

是将oo.sh作为参数传给sh(bash)命令来执行的,可以不用写内容第一行开头:#!/bin/bash

方法四:用source oo.sh 或 . oo.sh 执行会开启子shell 文件不要执行权限 (一般不用 vim /etc/init.d/network )

1.4:Shell的特性

1.4.1:命令执行顺序

1.“&&”表示逻辑与。&&连接的命令会按照顺序从前向后执行,只有当command1正确执行才执行command2,如果command1不正确执行,则不执行command2。在bash中,通过预定义变量“$?”来判断命令是否正确执行,如果"$?"的值为0则表示前一条命令正确执行,否则表示执行不成功。

2." ; " 执行命令中间的“分号”代表命令之间没有逻辑关系,分号连接的命令会按照顺序从前向后依次执行,但分号两端的命令之间没有任何逻辑关系,所有写出来的命令最终都会被执行,即使分号前面的命令出错也不影响后面的命令

3 "||"表示逻辑或。“||” 连接的命令会按照顺序从前向后执行,但只有当command1不正确执行才执行command2,command1正确执行则不会执行command2。||和&&都是短路符号,符号左右的命令之间具有逻辑关系。

4.如果不添加任何逻辑符号,脚本中的命令将会按照行的顺序进行执行,当第一行命令(comman1)执行完后,然后才会启动第二行执行命令(command2)。

1.4.2:echo linux打印命令

echo -e "\033[字体控制选项;字体背景颜色;文字颜色m 需要输出的内容 \033"
文字颜色:30m=黑色,31m=红色,32m=绿色,33m=黄色,34m=蓝色,35m=洋红,36m=青色,37m=白色。
字体背景色:40m=黑色,41m=红色,42m=绿色,43m=黄色,44m=蓝色,45m=洋红,46m=青色,47m=白色。
字体控制选项:1表示高亮,4表示下划线,5颜色闪烁

1.4.3:printf命令

printf 命令模仿 C 程序库(library)里的 printf() 程序。

%-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。

%s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。

1.4.4:通配符

?  匹配一个任意字符 
`*`匹配 0 个或任意多个任意字符,也就是可以匹配任何内容 
[] 匹配中括号中任意一个字符。 
[a-z] 匹配中括号中任意一个字符, -代表一个范围。 
[^a-z] 逻辑非,表示匹配不是中括号内的一个字符。
[a-z] [0-9] [a-zA-Z] [^0-9a-zA-Z]

[ ]类似一个集合

[ab] 匹配a和b两个字符

例如:find /bin/[ck]* 匹配bin目录下以c和k开头的文件名

例如:find /bin/ck* 匹配bin目录下以ck开头的文件

[ ]:与 ? 相似,可以匹配一个括号内的字符,也可以用“-”进行范围指定。

?:与任何单个字符匹配。

匹配任意长度的任意字符,就是说“什么都可以”。

二:Shell变量

2.1:认识变量

2.1.1:什么是变量

变量就是程序设计语言中的一个可以变化的量,可以变化的是变量的值。变量几乎所有的程序设计语言中都有定义,并且其涵义也大同小异。变量就是在程序中保存用户数据的一块内存空间而变量名就是这块内存空间的地址。

2.1.2:变量的命名

在Shell中,变量名可以由字母、数字或者下划线组成,并且只能以字母或者下划线开头。对于变量名的长度,Shell并没有做出明确的规定。

遵守驼峰语法:当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时, 第一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母或者大驼峰法把第一个单词是大写,后面的单词首字母也大写

例如:myFirstName、MYLastName

变量定义示例:变量名=变量值

命名规则:

  1. 变量名区分大小写
  2. 变量名不能有特殊符号
  3. 如果是有空格的字符串给变量赋值时,需要使用引号。
  4. 变量名不能以数字开头。
  5. 注意点:不能以数字开头不代表不能包含数字。
  6. 等号的两边不能有任何空格。
  7. 变量名尽量做到见其名知其意。
  8. 一般来说,变量名使用大小写均可。

2.1.3:变量的分类

1.自定义变量

自定义变量是由系统用户自己定义的变量,只在用户自己的 Shell 环境中有效,因此又称为本地变量。

定义变量:变量名=变量值  变量名必须以字母或下划线开头,区分大小写

引用变量:$变量名 或 ${变量名}

使用 echo 命令可以查看变量,且 echo 命令中可以查看多个变量值。

示例如下:

取消变量:unset 变量名

重新使用echo命令后,无显示结果

2.环境变量 定义环境变量

环境变量也称为全局变量,可以在创建他们的Shell及其派生出来的任意子进程Shell中使用。

环境变量又分为自定义环境变量和bach内置的环境变量

bash内置环境变量

shell程序在运行时,会接受一组变量来确定登录用户名、命令路径、终端类型、登录目录等等,这些变量就是环境变量。shell内置的环境变量是所有的shell程序都可以使用的变量,环境变量会影响所有的脚本的执行结果。

变量说明
PATH命令的搜索路径,以冒号作为分隔符
HOME用户的家目录的路径,是cd命令的默认参数
COLUMNS命令行编辑模式下可使用命令的长度
HISTFILE命令历史的文件路径
HISTFILESIZE命令历史中包含的最大行数
HISTSIZEhistory命令输出的记录数
LOGNAME当前用户的名字
SHELL当前使用的shell
PWD当前的工作目录

3.位置变量

位置变量并不是用户自定义的,而在shell中可以直接使用,这样一些约定俗成的规则就可以了。

 定义:当一条命令或脚本执行时,后面可以跟多个参数,我们使用位置参数变量来表示这些参数

4.预定义变量

5.只读变量

创建一个变量a并赋予其值a="hello word",将其设为只读变量readonly a,然后再修改该变量,显示不可修改。

2.2:变量赋值和替换

2.2.1 变量赋值

显式赋值 变量名=变量值

有效的 Shell 变量名:

RUNOOB
LD_LIBRARY_PATH
_var
var2

无效的变量命名:

?var=123
user*name=runoob

2.2.2:变量和引号

单引号(' ')单引号括起来的字符都作为普通字符出现

双引号(" ")双引号括起来的字符,除“$”、“\”、“'”和“"”这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待,

反引号(``)。反引号括起来的字串被Shell解释为命令,在执行时,Shell首先执行该命令,并以它的标准输出结果取代整个反引号(包括两个反引号)部分

2.3:变量的运算

2.3.1:算数运算符

表达式实例
$(())echo $((1+1))
$[]$[10-5]
exprexpr 10/5 注意点:乘法时,要使用转义符(\)即,expr 10\*5
letN=1;let n+=1 等价于 let n=n+1

echo $[ 算术表达式 ]

这种方法没有格式的限制

$((算术表达式))

注意 expr 运算符中间要有空格

当使用乘法运算符使用 \*,乘法运算符前需要加 \

i++和++i

i++表达式对变量没有影响,先赋值再运算

++i表达式对变量没有影响,先运算再赋值

故i++和++i对变量没有影响

i++先赋值再运算

++i先运算再赋值

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值