type
status
date
slug
summary
tags
category
icon
password
shell 是一个命令行解释器,它接受应用程序和用户命令,然后调用操作系统内核,shell还是一个功能相当强大的解释性编程语言,易编写、调试、灵活性强
Linux提供的命令解释器
sh是bash的软连接,CenOS默认的解析器是bash,使用命令
echo $SHELL
可以查看shell脚本入门
脚本以#!/bin/bash开头(指定解析器)
脚本有三种执行方式
- 采用bash或sh+脚本的相对路径或绝对路径(不用赋予脚本+x权限)
- 采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)
- 在脚本的路径前加上“.”或者 source
以上三种脚本执行方式的对比:
前两种方式都是在当前shell中打开一个子shell来执行脚本内容,当脚本内容结束,则子shell关闭,回到父shell中
第三种,也就是使用在脚本路径前加“.”或者 source的方式,可以使脚本内容在当前shell里执行,而无需打开子shell!这也是为什么我们每次要修改完/etc/profile文件以后,需要source一下的原因。
开子shell与不开子shell的区别就在于,环境变量的继承关系,如在子shell中设置的当前变量,父shell是不可见的。
常见系统预定义变量
$HOME→ /bin/bash、$PWD→/home/jin(当前路径)、$SHELL → /bin/bash、$USER→jin(当前登录用户)
查看当前shell里所有变量:set

自定义变量
- 基本语法
定义变量:变量名=变量值,注意=号前后不能有空格
撤销变量:unset 变量名
声明静态变量:readonly变量,注意:不能unset
- 变量定义规则
变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
等号两侧不能有空格
在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
变量的值如果有空格,需要使用双引号或单引号括起来。
特殊变量
$n
功能描述:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}
$#
功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性
$*、$@
$* 功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@ 功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$?
功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。
运算符
“$((运算式))”或“$[运算式]” 推荐后者,更干净清爽
条件判断
- test condition
- [ condition ](注意condition前后要有空格)推荐
流程判断
单分支if
多分支
注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格
case语句
注意事项:
(1)case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
(2)双分号“;;”表示命令序列结束,相当于java中的break。
(3)最后的“*)”表示默认模式,相当于java中的default。
for循环
增强for
比较$*和$@区别
while循环
read读取控制台输入
read (选项) (参数)
- p:指定读取值时的提示符; -t:指定读取值时等待的时间(秒)如果-t不加表示一直等待 参数 变量:指定读取值的变量名
系统函数
basename
dirname
自定义函数
shell工具
cut
awk
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
sort
sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。
wc
正则表达式
正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。在Linux中,grep,sed,awk三剑客命令都支持通过正则表达式进行模式匹配。
面试题
使用Linux命令查询file1中空行所在的行号
问题2:有文件chengji.txt内容如下:
张三 40
李四 50
王五 60
使用Linux命令计算第二列的和并输出
Shell脚本里如何检查一个文件是否存在?如果不存在该如何处理?
用shell写一个脚本,对文本中无序的一列数字排序ƒ
请用shell脚本写出查找当前文件夹(/home)下所有的文本文件内容中包含有字符”shen”的文件名称
- 作者:tacjin
- 链接:http://jin.wiki/article/608b7dae-8a8b-4801-a237-e211f261d166
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。