Shell脚本入门面试知识点(全)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

课程链接https://www.bilibili.com/video/BV1hW41167NW/?p=2&spm_id_from=pageDriver&vd_source=ea9ec7c370ef728a582ede44cc461e25

Shell概述

Shell是一个命令行解释器接收用户命令调用系统内核
image.png

解析器类型

  • sh
  • bash
  • nologin
  • dash
  • tcsh
  • csh

其中sh软链接到bash centos默认解析器是bash

Shell脚本入门

脚本格式

脚本开头指定解析器

#!/bin/bash

一个输出hello,word的脚本 1.sh

#!/bin/bash
echo hello,word

执行脚本

bash 1.sh ---方法1
sh 1.sh  ----方法2
source 1.sh ----方法3

./1.sh  ----方法4需要给权限chmod 777 1.sh

多命令行例子

需求在指定目录/home/atguigu/下创建一个banzhang.txt在banzhang.txt中增加’I Love LSX’ 。

#!/bin/bash
cd /home/atguigu/
touch banzhang.txt
echo "I Love LSX" >> banzhang.txt

Shell中的变量

常用系统变量

$HOME 当前用户的Java目录
$PWD 当前路径
$SHELL 默认的解析器
$USER 当前用户

自定义变量

语法

  • 定义变量变量=值
  • 撤销变量 unset 变量
  • 声明静态变量 readonly 变量不能unset
A=1
echo $A
//输出1

自定义变量规则

  • 可以由字母、数字和下划线组成不能以数字开头环境变量名建议大写
  • 等号两侧不能有空格
  • 在bash中变量默认类型是字符串类型无法直接进行数值运算
  • 变量的值如果有空格需要用双引号或者单引号
  • 可把变量提升为全局环境变量使用export 变量名

特殊变量

**1 n ∗ ∗ n 为数字 n** n为数字 nn为数字n表示该脚本名称$1-$9表示第一到第九个参数10以上的参数要用大括号括起来
此处参数表示执行脚本时的参数

touch parameter.sh
vim parameter.sh

#!/bin/bash
echo "$0 $1 $2 $3"

image.png
2$#
获取所有输入参数个数

#!bin/bash
echo "$0 $1 $2"
echo $#

image.png
3∗,@
$*: 代表命令行中所有的参数把所有参数看成一个整体
$@:代表命令行中所有的参数把每个参数区分对待

#!bin/bash
echo "$0 $1 $2"
echo $#
echo $*
echo $@

image.png
4$?
最后一次执行的命令的返回状态如果该变量的值为0说明上一次正确执行了如果返回非0的数字说明没有正确执行。

运算符

( ( 运算式 ) ) " 或者 " ((运算式))" 或者 " ((运算式))"或者"[运算式]”
expr +,-,*,/, %
expr运算符间要有空格

expr 2 + 3
expr `expr 2 + 3` \* 4

` 为esc下边的字符不是英文引号。

s=$[(2+3)*4]
echo $s

条件判断

语法

[ condition ] condition前后要有空格条件非空即为true

常用判断条件

1整数比较

= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于

image.png
2文件权限判断

-r 读
-w 写
-x 执行

image.png
3文件类型判断

-f 文件存在且是一个常规文件
-e 文件存在
-d 文件存在且是一个目录

image.png
4多条件判断

$$ 与前对才执行后
|| 或

流程控制重点

if语句

语法

if [ condition ];then
	程序
fi
-------或者--------------------
if [ condition ]
	then
		程序
fi

注意
[ condition ] 中括号和条件判断式之间必须有空格
if后面要有空格

案例
输入一个数字如果是1则输出hello如果是2则输出word如果是其他什么也不输出

#!/bin/bash
if [ $1 -eq 1 ]
then
	echo "hello"
elif [ $1 -eq 2 ]
then
	echo "word"
fi

执行脚本

bash if.sh 1

输出hello
image.png

case语句

语法

case $变量名 in  
	"值 1") 
		程序;; 
	"值 2") 
		程序;; 
	*)
  	程序;;
esac

注意
case行尾必须为单词in ,每一个模式匹配必须以右括号结尾
双分号;;表示命令序列结束相当于java中的break
最后的*)表示默认模式相当于java中的default

案例

#!/bin/bash
case $1 in  
"1") 
	echo "男士";; 
"2") 
	echo "女士";; 
*)
	echo "人妖";; 
esac

image.png

for循环

语法

for (( 初始值循环控制条件变量变化 ))
	do
  	程序
	done

或者

for 变量 in 值1 值2 值3 ... 
	do
		程序
	done

案例

#!/bin/bash
s=0
for((i=1;i<=100;i++))
do
  	s=$[$s+$i]
done
echo $s
#!/bin/bash

for i in $*
do
  	echo "banzhang xihuan $i"
done

image.png

#!/bin/bash

for i in "$*"
do
  	echo "banzhang love $i"
done

for j in "$@"
do
  	echo "banzhang love $j"
done

image.png

while 循环

语法

while [ condition ]
do 
	程序
done

案例

#!/bin/bash

s=0
i=0
while [ $i -le 100 ]
do
	s=$[$s+$i]
	i=$[$i+1]
done

echo $s

read读取控制台输入

语法

read(选项)(参数)
选项
  -p: 指定读取值时的提示内容
  -t:指定读取值时等待的事件秒
参数
  变量指定读取值的变量名

案例

!#/bin/bash

read -t 7 -p "input your name" NAME
echo $NAME

函数

系统函数

basename
basename [string/ pathname][suffix] 

功能描述命令会删除所有的后缀包括最后一个/字符的然后输出字符串
选项如果指定suffix 为后缀basename会将string或者pathname中的后缀去掉

用来获取文件名

image.png

dirname

dirname 文件绝对路径 从给定的包含绝对路径的文件名中去除文件名然后返回剩下的路径
image.png

自定义函数

[ function ] funname[()]
{
	Action;
	[return int;]
}
funname

必须在调用函数地方之前要先声明函数
函数返回值只能通过$?系统变量获得可以显示加return 返回如果不加将最后一条命令运行结果做为返回值return后跟数值n(0-255)

#!/bin/bash

function sum()
{
	s=0
	s=$[$1+$2]
	echo $s
}

read -p "input your paramter1:" P1
read -p "input your paramter2:" P2

sum $P1 $P2

image.png

Shell工具

cut

在文件中剪切数据用从文件中的每一行剪切字节、字符和字段并将这些字节、字符和字段输出
基本用法

cut[选项参数] filename

默认分隔符是制表符
选项参数
-f 列号 提取第几列
-d 分隔符按照指定分隔符分割
举例
数据准备
image.png

cut -d " " -f 1 cut.txt

image.png

cut -d " " -f 2,3 cut.txt

image.png

1、先过滤出guan开头的文字行
2、再切割

image.png

3-表示第三列以及第三列后的所有数据

image.png

eth0 内的 inet addr后的ip地址

image.png

sed

一种流编辑器一次处理一行内容。处理时把当前处理的行存储在临时缓冲区中称为模式空间sed命令处理缓冲区中的内容处理完成后把内容送往屏幕接着处理下一行不断重复。文件内容不改变除非你使用重定向存储输出。
基本用法

sed [选项参数] `command` filename

选项参数
-e 直接在指令列模式上进行sed的动作编辑
命令功能
a 新增
d 删除
s查找并替换
案例
1、数据准备
image.png
1将"mei nv"插入sed.txt第二行下
image.png
2a表示第二行下面新增源文件并没有改变。
2删除sed文件中包含“wo”的行
image.png
3将文件中“wo”替换为“ni”
image.png
g 表示全局替换
4将文件的第二行删除并将“wo”替换为“ni”
image.png

awk

强大的文本分析工具把文件逐行的读入以空格为默认分隔符将每行切片切开的部分再进行分析处理。
基本用法

awk [选项参数] 'pattern1{action1}' filename

pattern表示awk在数据中查找的内容
action找到匹配内容时执行命令
选项参数
-F指定输入文件分隔符
-v赋值一个用户定义变量
案例
1、数据准备

sudo cp /etc/passwd ./

2、修改文件权限
image.png
3、查看文件内容
image.png
1搜索文件以“root”开头的所有行并输出该行的第7列
image.png
2搜索文件以“root”开头的所有行并输出该行的第1列和第7列以“”分隔
image.png
3只显示/etc/passwd的第一列和第七列以逗号分隔且在所有行前面添加列名usershell在最后一行添加“dahaige/bin/zuishuai”。
image.png
BEGIN在所有数据读取行之前执行END在所有数据执行后执行。
4将passwd中的用户id增加数值1并输出
image.png

内置变量

filename文件名
nr已读的记录数
nf浏览记录的域的个数
1统计passwd文件名每行的行号每行的列数
image.png
2切割ip
image.png
3查询sed.txt中空行所在的行号
image.png

sort

文件排序
基本用法

sort(选项)参数

选项
-n 按照数值大小排序
-r 以相反的顺序排序
-t 设置排序使用的分隔字符
-k 指定需要排序的列
参数
指定待排序文件列表
案例
1、数据准备
image.png
1按照第二列倒序排序
image.png

企业真实面试题

image.png
image.png
image.png
image.png

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: shell