当前位置: 首页 > news >正文

Linux中的shell脚本

什么是shell脚本

  • shell脚本是文本的一种
  • shell脚本是可以运行的文本
  • shell脚本的内容是由逻辑和数据组成
  • shell脚本是解释型语言

用file命令可以查看文件是否是一个脚本文件

file filename

脚本书写规范

注释

单行注释

使用#号来进行单行注释

多行注释

使用

: "

注释内容

注释内容

注释内容

"

注意:冒号后面有空格

注意

在.vimrc里面注释行时
用的是"

vim用于书写脚本的设定

ts:tab键的大小

sw:缩进大小

ai:自动缩进

et:将tab键补齐的大空格拆分成小空格

注:当你规定了tab键的大小时,再规定sw的缩进大小将不生效

用vim编辑这个配置文件 

vim ~/.vimrc

自动添加新创建的特定文件的预定内容

也是编写这个配置文件

vim ~/.vimrc

如下代码块

 第一行的意思是当新创建一个以.sh或.script时自动执行下面我们自己写的一个SHELLTITLE函数

其中函数中写的是

在第1行(linux中行数从0开始计算,所以代码中写的是0而不是1)添加上“hahahahahahahahaha”这行内容

在第2行添加上日期,其格式为年/月/日

autocmd BufNewFile *.sh,*.script call SHELLTITLE()
func SHELLTITLE()call append(0,"hahahahahahahahaha")call append(1,"# Date:             ".strftime("%Y/%m/%d"))
endfunc

检验效果

以.sh结尾的新文件会自动添加

以.script结尾的新文件

也会自动添加

如果不是以.sh或.script结尾的新文件
也是不会自动添加的

脚本执行方法

创建了一个新脚本文件

里面编写的内容

注:没有可执行权限

在没有可执行权限时

. 脚本

. 脚本

source 脚本

source 脚本

sh 脚本

sh 脚本

 

当有可执行权限时

./脚本

./脚本

 

直接执行脚本的绝对路径

脚本的绝对路径

脚本调试

写一个手残脚本

其中cat处本应该是cal

运行手残脚本

会发现被卡住了

假装排查代码眼残也没发现问题哈哈哈哈

那么我们就可以用sh -x 来执行脚本

调试脚本

sh -x 脚本

这次可以清楚的看到卡在了哪一步 

这样对我们的脚本排错有很大的作用

然后我们改一下我们的脚本

脚本在指定环境中运行

.        脚本

source        脚本

直接执行脚本的绝对路径 会直接新开bash来执行脚本

exit值

查看退出值

echo $?

退出值0为正常退出,非0值都是错误退出,不正常。

修改退出值

exit 你想要的退出值

打印文本

cat&tac

正向打印&反向打印

seq

注:只能打数字

seq 1 3
#打印1到3
seq 2 2 10
#打印2到10 步长为2
seq 1 2 10
#打印1到10 步长为2

echo

echo 123
echo "hello world"echo -n "hello world" //不换行打印echo -e "hello\tworld" //解析转义字符

printf

printf "hello vb" //不换行打印
printf "hello vb\n" //换行打印printf "3%%" //打印百分号printf "%0.1f" "3.141592653579"    //保留一位小数
printf "%0.2f" "3.141592653579"    //保留两位小数
printf "%0.3f" "3.141592653579"    //保留三位小数
printf "%.3f"  "3.141592653579"    //保留三位小数
printf "%.2f"  "3.141592653579"    //保留两位小数
printf "%.1f"  "3.141592653579"    //保留一位小数
printf "%.0f"  "3.141592653579"    //取整数

注:保留几位小数都是会四舍五入的

uniq

对于命令输出的字符冗余部分进行处理

注:只对有排序后的文件有用

vb里有实验素材,就是这些无序的数字

-d #显示重复的行
sort  -n vb  | uniq   -d
-u #显示唯一的行
sort  -n vb  | uniq   -u

-c #合并重复并统计重复个数
sort  -n vb  | uniq   -c

cut

用户对字符的截取

生成实验文件,我是从/etc/passwd中复制出来的

cut -d : -f 1 ./test

 指定分割符为 : 指定显示的列为第1列 对当前目录下的test文件作用

 指定分割符为 : 指定显示的列为第1列到第3列 对当前目录下的test文件作用 

cut -d : -f 1-3 ./test

 指定分割符为 : 指定显示的列为第3列到最后一列 对当前目录下的test文件作用

cut -d : -f 3- ./test

 指定分割符为 : 指定显示的列为第1列和第3列 对当前目录下的test文件作用

cut -d : -f 1,3 ./test

第一个字符到第四个字符

cut -c 1-4 ./test

第一个字符和第四个字符

cut -c 1,4 ./test

首字符到第八个字符

cut -c -8 ./test

第八个字符到末尾字符

cut -c 8- ./test

xargs

xargs 命令作用是将标准输入数据转换成命令行参数,能够处理管道或者标准输入并将其转换成特定命令的命令参数

原本echo的输出通过管道给touch是不能进行生成文件的操作的

所以我们需要用xargs来承接给touch(等那些不能直接接返回输出进行操作的命令)命令

echo /mnt/vb{1..3} | xargs touch

多行输入单行输出

xargs < ./vb

 指定每行输出个数

xargs -n 3  < ./vb

-n 3就是指定每行输出个数为3个 

指定分隔符

echo "vb:vb:vb" | xargs -d :

指定的是:,输出时将删除分隔符再输出 

echo "aaa:abc:cba:bba" | xargs -d a

同样如果用了字符a来进行分割的话,可以看到下方效果显示,将所有的字符a删去空位符替代并输出

用字符代替接收值

 ls /mnt/* | xargs -I word rm -fr  word

转义

在shell中有很多本身有特殊功能的字符,比如空格井号等等
如果在给变量赋值或执行命令使用时我们只想使用这些符号本身那么就需要用到转义或引用
在shell中反斜杠表示转义,每个反斜杠只能转义一个字符
在shell中单引号表示强引用,我们可以把它看作批量转义,在单引号内的所有字符被视为字符本身
在shel中双引号表示弱引用,其和单引号的区别在于不能引用(\!$)

单个转义和多个转义

单个转义

可以用\

echo #helloworldecho \#helloworld

 

当我们需要转义一串字符中含有空格断开的一个井号时

我们需要用到多个转义

"XXXXXXXXX" 

注:要想打出\,则需要用'\',而不是"\"

同样的$,需要'$'才能转义,而"$"会被注释

变量

如果没加local参数

环境级别变量只在当前运行的shell中生效,shell关闭变量被释放

用户级变量只有登录系统的指定用户,此变量才生效

系统级变量是系统中的永久设定,所有用户都可以使用,系统变量通常被保存到/etc/profile中

相关文章:

  • 【Dockerfile 完全参数化的通用 APT 源配置方案】
  • 【Python】yield from 功能解析
  • 模块化设计,static和extern(面试题常见)
  • 互联网大厂Java求职面试:云原生微服务架构设计与AI大模型集成实战
  • C# SolidWorks二次开发-实战1,找文件名不同实体相同的零件。
  • Jenkins 2.479.1安装和邮箱配置教程
  • 机器学习算法03:聚类算法
  • 鸿蒙 HarmonyOS - SideBarContainer 组件自学指南
  • Redis 插入中文乱码键
  • AR-HUD 光波导方案优化难题待解?OAS 光学软件来破局
  • 直播预告 | 聚焦芯必达|打造可靠高效的国产 MCU 与智能 SBC 汽车解决方案
  • 无缝转换!冶金级DEVICENET转EtherCAT网关,稳定可靠扛得住!
  • Centos7系统下脚本一键部署LAMP环境
  • Idea 配置 Maven 环境
  • AAOS系列之(七) --- AudioRecord录音逻辑分析(一)
  • Java并发
  • RocketMQ 死信队列(DLQ)实战:原理 + 开发 + 运维 + 架构应用指南
  • 从Java的Jvm的角度解释一下为什么String不可变?
  • 【SpringCache 提供的一套基于注解的缓存抽象机制】
  • Arduino学习-跑马灯
  • 网站建设unohacha/企业站seo价格
  • 网站建设与管理必修/推广公众号
  • 西安品牌网站建设服务商/近期时事新闻
  • 住房和城乡建设网站 上海/免费永久注册顶级域名网站
  • 东莞网站优化关键词费用/济南最新消息
  • 天津做公司的网站/南宁seo优化公司排名