shell自动化编程笔记

21 篇文章 0 订阅
echo $?
#返回上一命令的状态,正常返回0,不正常返回非0任意值
&&
#逻辑判断符,只有当前一句的值为真才会执行&&后面的内容
||
#逻辑判断,当前一句为假时执行||后面的内容#;只会区分开两条命令,不会判断两条语句间的逻辑关系
&>
#将前一句的结果重定向到另一个文件中去
&>/dev/null
#这句是将之前的输出结果输出到/dev/null里面去

#bash脚本要习惯先给执行权限,再执行
#在脚本文件的第一行输入#!/usr/bin/bash即可以直接./bashname.sh执行
#如果是python脚本则是#!/usr/bin/python
#不同类型的文件需要用不同的解释器来执行
#程序的组成:逻辑+数据
#C需要先编译再执行,shell是解释型,效率比C低
#JAVA也是先编译,但编译后生成字节码,由Java虚拟机(JDK)执行,也属于解释型
#python既有编译执行也有解释执行,编译成python的字节码,由python的虚拟机执行
shell:/usr/bin/bash
perl:/usr/bin/perl
except:/usr/bin/except
python:/usr/bin/python
#语句中间使用了其他语言,可以用:(解释器路径) <<-EOF 内容 EOF 来执行,不会报错,前面的解释器路径不是必须的

#EOF没有实际意义,换成其他字段同杨执行,-表示不考虑结束符的缩进问题,如果没有-,结尾的EOF产生了不对称的缩进则报错
#以上方法在python语言中不适用
#执行方式差异:
bash bashfilename.sh
./bashfilename.sh
#在子shell中执行,不会影响实际的用户目录的路径
. bashfilename.sh
source bashfilename.sh
#在当前shell中执行
#!/usr/bin/bash
cd
apt update
apt -y upgrade && echo "apt upgraded"

login shell和nologin shell:

#登录与非登录的概念,login shell允许用户登录,nologin shell不允许用户登录

su命令 su - 和su命令的区别

eg:
su alice
:进入到之前所在目录,不会加载用户的shell环境
su - alice
:进入alice的用户主目录,会加载用户的shell环境

有些用户默认是不可登录的,需要使用usermod -s /bin/bash +username
才可以进行登录。

/etc/profile
/etc/bashrc		系统级
#登录shell会执行
~/.bash_profile
~/.bashrc		用户级
#登录shell会执行

~/.bash_logout
~/.bash_history
#离开shell会执行的

#在~/.bash_logout文件中写入相关指令,用户每次离开shell就会执行这个文件,history这个文件也是一样的道理,那么举例:在logout文件中写入reboot或者shutdown,那么每次用户退出shell就会执行重启或者关机操作


#二狗子在我的文件中写入了欢迎语句,那么在登录时就会有下面的提示出现了。
#当然,我们还可以apt install -y sl或者yum -y install sl
#然后在启动文件里面写入sl
#下次登录的时候就会有一辆小火车出来迎接你了

在这里插入图片描述

在这里插入图片描述

!+数字 :执行历史命令
!+字符:执行符合字符的相关命令,命令一致直接执行,命令不匹配先匹配符合字符的相关命令,补全后执行
!+$:执行上一命令的最后一个参数
!!:上一命令的上一命令
#alias:查看指令的别名

指令再编辑操作指令:

#指令再编辑指的是在你的命令行上对之前操作过的指令进行相关的编辑操作
Ctrl+R 输入相关指令中的字符,可以快速匹配之前输入过的指令
Ctrl+D 执行logout指令,快速退出,等同于exit
Ctrl+A 将光标移动到命令的最前
Ctrl+E 将光标移动到命令的最后
Ctrl+K 删除光标之后的字符
Ctrl+U 删除光标之前的字符
Ctrl+L 删除命令上显示的其他内容,将命令行置于显示器顶部,相当于清屏
Ctrl+S 锁住屏幕,但不会锁住命令的执行,即敲键盘照样录入,但不会显示
Ctrl+Q 解锁屏幕

前台后台作业控制:

&:后台执行 
nohup
screen
#Ctrl+C 通常杀掉的是前台进程
#当子进程在运行的时候,其父进程是不能有终端这个概念的
#当我们在shell界面敲指令的时候,其父进程是没有办法工作的
#所以用到了前台和后台的概念
#
#在一个进程在执行的时候加载到后台去,或者一个前台进程在运行的时候使用Ctrl+Z 运行到后台去
#Ctrl+z准确来说是暂停一个前台作业
#无论前台后台都是进程的概念
#Ctrl+z暂停一个进程,开始别的进程作业,fg回到之前的进程作业,bg再回到后台去
#
#kill %+数字 和 kill +数字
#kill %+数字:作业号 kill+数字:进程号

输入输出重定向:

#每一个进程打开一个文件都有一个文件描述符与之对应,只要这个文件没有关闭,描述符就不会释放 描述符又叫文件句柄

#可以利用文件句柄来恢复一个可能被删除的文件

#一个进程打开了一个文件,只要它是在write这个文件,那么这个进程打开这个文件以后,这个描述符(句柄)就没有释放,就算文件被删除了,我们还可以通过句柄把文件找回来。

#三个文件描述符比较常见:0,1,2
#分别定义了打开的文件,输入的文件,输入错误的文件

#符号>和>>都是输入重定向,区别在于追加和覆盖的问题

#cat < /etc/host
#输出重定向

eg:
cat < /etc/host >/etc/hosts
#等同于copy命令
#将文件内容输出到另一个文件中


管道|

|tee管道:

eg:
date > date.txt
#不会出现在屏幕上,直接重定向到文件中去

date |tee date.txt
#使用tee管道重定向,会在屏幕上输出,再作为新的输入

命令排序

# ; 不具备逻辑判断,一行上敲多个命令使用分号,仅仅是命令的简单排序,如果前一命令失败,后面的命令照常执行

# && 逻辑与判断
# || 逻辑非判断

eg:
如果 /home/111/aaa 不存在,则创建之
ls /home/111/aaa || mkdir -p /home/111/aaa


元字符:(通配符)

#元字符通常不是字符本身的意思
* #匹配任意多个字符#匹配任意一个字符
[]#匹配括号中的任意一个字符
()#在子shell中执行
ll /dev/sd[a-z]:sd+任意一个
ll /dev/sd[a-z]*:sd+任意多个
在()中添加命令也是在子shell中执行
{}表示一个集合
#mkdir /home/{aaa,bbb}在home目录下创建aaa和bbb目录
\:转义字符,转义字符本身不会出现
\+空格:直接转义了空格,让空格变成了普通字符,失去了空格的原意
\+回车:把回车的功能给转义了。
\只转义紧接着的字符
\跟在特定字符后面可以变成特殊字符:\t:tab键

echo 输出带颜色文字

echo -e "\e[1;31m+内容"
1;31m数字可以任意
30到37是前景色
40以上是背景色

echo -e "\e[1;31m内容\e[0m"
#只输出部分有颜色,0m再次恢复
echo -e "\e[1;30m+内容:灰色
echo -e "\e[1;31m+内容:红色
echo -e "\e[1;32m+内容:绿色
echo -e "\e[1;33m+内容:黄色
echo -e "\e[1;34m+内容:蓝色
echo -e "\e[1;35m+内容:紫色
echo -e "\e[1;36m+内容:紫色
echo -e "\e[1;37m+内容:青色
echo -e "\e[0m+内容:重置

变量

持续更新中…

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

是二狗诶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值