Shell开荒

Shell 简介

Shell:命令行解释器
作用:接收用户 & 系统指令,调用操作系统的内核
在这里插入图片描述

Shell 解释器

查看Centos7提供的Shell解释器

# 查看Linux提供的Shell解释器
cat /etc/shells

在这里插入图片描述
sh : bash

cd /bin
ll | grep bash

在这里插入图片描述
Centos 默认bash

echo $bash

在这里插入图片描述

1 Shell 脚本入门

脚本格式
首先指定解释器

#!/bin/bash

悄悄地说:开头写#!/bin/sh 也可以执行,软连接 用的还是 bash

1.1 脚本常用执行方式

1.1.1 sh & bash + 脚本

  • sh + 相对路径
  • sh + 绝对路径
  • bash + 相对路径
  • bash + 绝对路径
    在这里插入图片描述

1.1.2 直接输入脚本

需要执行权限

chmod 777 helloworld.sh
./helloworld.sh
/bin/helloworld.sh

在这里插入图片描述

Debug

1 sh -x test.sh

在这里插入图片描述
#!/bin/bash -x

1.3 多命令处理

[root@localhost bin]# vi batch.sh
[root@localhost bin]# ls
batch.sh
[root@localhost bin]# cat batch.sh 
#!/bin/bash
mkdir /home/bin/test
cd /home/bin/test
touch test.txt
echo "Hello World" >> test.txt
[root@localhost bin]# sh batch.sh 
[root@localhost bin]# cat /home/bin/test/test.txt
Hello World
[root@localhost bin]# 

在这里插入图片描述

2 变量

2.1 常用的系统变量

$HOME
$PWD
$SHELL
$USER

查看系统中的全部变量

set

在这里插入图片描述

2.2 自定义变量

1 基本语法

  • 定义变量
变量=值
A=5
  • 撤销变量
unset 变量
unset A
  • 申明静态变量(不可修改撤销)
readonly 变量=值
readonly A=5

在这里插入图片描述
2 变量定义规则

  • 变量名
字母 & 数字 & 下划线 组成
数字不能开头,建议字母全部大写
  • 等号两侧不能有空格
  • 在bash中,变量默认字符串,无法数值计算
  • 变量有空格需要加 ’ ’ 或 " "

2.3 特殊变量

$n

n:数字
$0:代表该脚本的名称
$1~$9:第一个到第九个的参数 
${10}~:十以上的参数
#!/bin/bash

echo $0
echo "$0"
echo $0 $1 $2 $3 $4

在这里插入图片描述

$#

获取所输入的参数的个数 
常用于循环当中
#!/bin/bash

echo $0
echo "$0"
echo $0 $1 $2 $3 $4
echo $#

在这里插入图片描述

$* $@

$* 
代表命令行中的所有的参数
$*: 把所有的参数都看成一个整体
$@
也是代表全部的参数 
不过$@把所有的参数都区别对待
#!/bin/bash

echo $0
echo "$0"
echo $0 $1 $2 $3 $4
echo $*
echo $@

在这里插入图片描述

比较两者区别
当它们被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1 2 … 2 … 2n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “ 2 ” … ” 2”…” 2n”的形式输出所有参数

#!/bin/bash
for i in "$*"
do
        echo "echo $i"
done

在这里插入图片描述

#!/bin/bash
for i in "$@"
do
        echo "echo $i"
done

在这里插入图片描述

$?

最后一次执行的命令的返回状态。
返回 0 ,证明上一个命令正确执行
返回非0 :上一个命令不正确(具体返回数字由名字决定)

在这里插入图片描述

3 运算符

3.1 基本语法

$((运算式))
$[运算式]
expr + , - , \*, / . % (加 减 乘 除 取余)
action: expr 运算符间要有空格

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4 条件判断

[ condition ]
action : 条件非空即为true ,[atguigu] 返回true , [] 返回false

4.1 判断条件

4.1.1 两个整数之间比较

= 字符串比较

-lt	(less than)			-le (less equal)
-eq (equal)				-gt(greater than) 
-ge(greater equal)		-ne(not equal)

在这里插入图片描述

4.1.2 是否具有写权限

2)helloworld.sh是否具有写权限
[atguigu@hadoop101 datas]$ [ -w helloworld.sh ]
[atguigu@hadoop101 datas]$ echo $?
0

4.1.2 是否存在文件


3)/home/atguigu/cls.txt目录中的文件是否存在
[atguigu@hadoop101 datas]$ [ -e /home/atguigu/cls.txt ]
[atguigu@hadoop101 datas]$ echo $?
1

5 流程控制

5.1 if判断

if [ 条件判断式 ];then
	程序
fi

或者

if [ 条件 ]
	then
		程序
fi

action:[ 条件 ] 中括号和条件之间必须有空格
if后面要有空格

#!/bin/sh

if [ $1 -eq 1 ] 
then 
	echo one
elif [ $1 -eq 2 ] 
then 
	echo two
else
	echo "other"
fi

在这里插入图片描述

5.2 case语句

case $变量名 in
	“值 1”)
		如果变量名的值等于1,则执行程序1
		;;
	“值 2”)
		如果变量名的值等于2,则执行程序2
		;;
	*)
		如果以上值都不相等,执行此程序
		;;
esac

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

#!/bin/bash

case $1 in
"1")
        echo "one"
;;
"2")
        echo "two"
;;
*)
        echo "other"
;;
esac
~

在这里插入图片描述

5.3 for循环

语法1

for(( 初始值;循环控制条件;变量变化 ))
	do
		程序
	done
[root@localhost soft]# vi for.sh
#!/bin/bash
s=0
for((i=0;i<10;i++))
do
        echo $i
done

在这里插入图片描述
语法2

for 变量 in 值1 值2 值3...
	do
		...
	done
#!/bin/bash
for i in $*
do
        echo "ceho $i "
done

在这里插入图片描述

5.4 while

while [ 条件 ]
do
	...
done
#!/bin/bash
s=0
i=1
while [ $i -le 10 ]
do
s=$[ $s + $i ]
i=$[ $i + 1 ]
done
echo $s

在这里插入图片描述

6 read读取控制台输入

read(选项)(参数)
选项:
	-p: 指定读取时的提示符;
	-t:指定读取值等待的时间(秒)
参数
	变量:指定读取值的变量名

案例:提示7秒内 读取控制台输入的名称

#!/bin/bash
read -t 7 -p "Enter your name in 7 seconds " NAME
echo $NAME

在这里插入图片描述

7 函数

7.1 系统函数

basename基本语法

basename[ string / pathname] [ suffix ]
删掉所有的前缀包括最后一个('/')字符,让后将字符串显示出来
suffix为后缀,如果suffix被指定了,basename会将pathname或stringzhongdesuffix去掉

在这里插入图片描述
dirname基本语法

dirname文件绝对路径
去除文件名(非目录部分 然后返回剩下绝对路径)

在这里插入图片描述

7.2 自定义函数

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

函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,
将以最后一条命令的运行结果作为返回值
return后跟数值n(0-255)

#!/bin/bash
function sum()
{
s=0
s=$[ $1 + $2 ]
echo "$s"
}
read -p "Please input the number1:" n1;
read -p "Please input the number2:" n2;
sum $n1 $n2;


在这里插入图片描述

8 Shell工具

8.1 cut

cut的工作就是“剪” ,具体的说就是在文件中负责剪切数据用的。cut命令从文件的每一行剪切字节、字符和字段 并输出

cut [ 选项参数 ] filename
默认分隔符是制表符
-f : 列好 读取第几列
-d : 分隔符,按照指示分隔符分割

在这里插入图片描述

8.2 sed

sed是一种流编辑器,一次处理一行内容
处理时,处理内容存储在临时缓冲区 称为“模式空间” 文件内容没有改变

sed [ 选项参数 ] ‘command’ filename
选项参数:
	-e:直接在指令列模式上进行sed的动作编辑
命令功能:
	a:新增,a的后面可以接字串,在下一行出现
	d:删除
	s:查找替换

不改变源文件插入一行
在这里插入图片描述
删除包含C的行
在这里插入图片描述
替换C为Swift
在这里插入图片描述

8.3 awk

一个强大的文本分析工具,将文本逐行读入,以空格为默认分隔符将每行切片 切开的部分再进行分许处理

awk [ 选项参数 ] ‘pattern1{action}  pattern2{action}...’ filename
pattern : 表示awk再数据中查找的内容 ,就是匹配模式
action :  在找到的匹配内容中进行一系列的命令

-F : 指定分隔符
-v : 复制一个用户 定义变量
awk -F: '/^root/{print $7}' passwd
查找root 并打印第七行
 awk -v i=1 -F: '{print $3+i}' passwd
将passwd文件中的用户id增加数量1并输出

awk内置变量

FILENAME : 文件名
NR :  已读的记录数
NF : 浏览记录的域的个数(切割后 , 列的个数)

查询Python所在的行数
在这里插入图片描述
只显示/etc/passwd 的第一列和第七列,以逗号分隔,且在所有行前添加列明user,最后一行添加“END”
在这里插入图片描述
Action:BEGIN在所有数据读取之前执行,END在所有数据读取之后进行

8.4 sort

将文件进行排序 并将排序结果标准输出

sort(选项)(参数)

-n:依照数值大小进行排序
-r:依照相反的顺序进行排序
-t:设置排序时所用的分隔符
-k:指定排序的列

倒叙排列第三行
在这里插入图片描述

面试题总结

使用Linux命令查询file中空行所在的行号

awk '/^S/{print NR}' filename

shell 计算第二列的和并输出

cat cut.txt | awk -F " "  '{sum+=$2} END{print sum}'

shell检查一个文件存不存在

if [ -f hello.txt ]
then
	echo "文件存在"
else
	echo "文件不存在"
fi

shell对文本第一列数字排序并求和

sort -n cut.txt | awk ‘{a+=$0;print$0}END{print "SUM="a}’

查找当前文件夹(/home)下所有的文本文件内容中包含有"hello"的文件名称

gerp -r "hello" | cut -d ":" -f 1

Shell编写规范

开头写脚本介绍

#!/bin/bash

#        sh standard.sh db table where
#---------------------------------------------
#FileName:		standard.sh
#Version:		1.0
#Date:			2020-03-15
#Author:		ruozedata-J
#Description:		example of shell script
#Notes:			project ....
#		2020-07-01 脚本开发
#		2020-07-10 脚本bug修复,具体bug为.....
#---------------------------------------------

遇到没有命名的参数,直接退出,防止出现误操作

set -u

退出

exit 0  # 正常退出
exit 1  # 异常退出
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oifengo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值