Linux中的shell,你知道多少?_不浪费时光jx的博客-程序员秘密

技术标签: linux  

Bash 命令

shell概述

shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是 解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。

在这里插入图片描述

  • shell分类

Bourne Shell:从1979起Unix 就开始使用l,Bourne Shell的主文件名为sh。

C Shell: C Shell主要在BSD版的Unix系统中使用,其语法和C语言相类似而得名

Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主 要包括sh、ksh、 Bash、 psh、 zsh; C家族主要包括: csh、 tcsh

Bash: Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell。

  • 查看Linux支持哪些shell
vim /etc/shells

执行脚本

  • 创建脚本
vi hello.sh  //后缀名无所谓

所有脚本第一句要写
#!/bin/Bash

  • 输出命令 echo
  • 执行方式

1、 绝对路径或者相对路径执行

chmod 755 hello.sh //给脚本赋予权限

2、 通过bash命令执行

不能输出 !,具有特殊含义,单引号可以输出 ‘ !’

echo -e : 支持反斜杠

  • Windows格式换成Linux格式

再Windows中,写的文件到Linux去,会发生格式不能识别
如:
换行符 Windows是 ^M$
换行符 Linux是 $

dos2nuix
  • Linux格式换成Windows格式
nuix2dos

历史记录histoy

history 

参数
-c:清空所有历史记录(不建议不清空)
-w:把本次登录的所有命令保存到历史记录文件里 ~/.bash_history

历史命令默认会保存1000条,可以在环境

变量配置文件/etc/profile中进行修改

  • 历史命令的调用
  1. 使用上、下箭头调用以前的历史命令使用‘
  2. !n”重复执行第n条历史命令使用‘
  3. “!!” 重复执行上一条命令使用“!字串”重复执行最后一条以该字串开头的命令.

命令别名

  • alias
alias:查询全部别名

alias 新命令=”旧命令“ :临时起别名,重启失效

vi /root/.bashrc :编辑文件使别名永久生效

unalias 别名:删除别名

第一顺位执行用绝对路径或相对路径执行
的命令。
第二顺位执行别名。
第三顺位执行Bash的内部命令。
第四顺位执行按照$PATH环境变量定义的
目录查找顺序找到的第-一个命令。

快捷键

Bash命令 解释
ctrl+A 把光标移动到命令行开头。
ctrl+E 把光标移动到命令行结尾。
ctrl+C . 强制终止当前的命令。
ctrl+L 清屏,相当于clear命令。
ctrl+U 删除或剪切光标之前的命令。
ctrl+K 删除或剪切光标之后的内容。
ctrl+Y 粘贴ctrl+U或ctrl+K剪切的内容。
ctrl+R 按下ctrl+R之后,就会出现搜索界面,只要输入搜索内容,就会从历史命令中搜索。
ctrl+D 退出当前终端。
ctrl+Z 暂停,并放入后台。这个快捷键牵扯工作管理的内容,我们在系统管理章节详细介绍。
ctrl+S 暂停屏幕输出。
ctrl+Q 恢复屏幕输出。

输入输出重定向

设备 设备路径 文件描述符 类型
键盘 /dev/stdin 0 标准输入
显示器 / dev/ sdtout 1 标准输出
显示器 /dev/sdterr 2 标准错误输出

输入输出重定向的用处:
执行命令并把执行命令的结果放进一个文件里面,给未在场的工作人员看看执行命令时的结果。

  • 输出重定向
  1. 正确、错误信息分别放到不同的文件里
类型 符号 代表含义
标准输出重定向 命令 > file 命令执行信息放到文件——覆盖
标准输出重定向 命令 >> file 命令执行信息放到文件——追加
标准错误输出重定向 命令 2> file 标准错误重定向到文件-覆盖
标准错误输出重定向 命令 2>> file 标准错误重定向到文件-追加
两种选择文件 命令 >> 文件a 2>> 文件b 把正确的输出追加到文件a中,把错误的输出追加到文件b中。
  1. 正确、错误信息单独放到一个文件里
类型 符号 代表含义
正确输出和错误输出同时保存 命令 &> file 覆盖文件
正确输出和错误输出同时保存 命令 &>> file 追加文件
正确输出和错误输出同时保存 命令 > file 2>&1 覆盖文件
正确输出和错误输出同时保存 命令 >> file 2>&1 追加文件
  • 输入重定向
wc 

参数
-c:统计字节数
-w:统计单词数
-l:统计行数

多命令顺序执行

类型 符号 代表含义
命令a ;命令b 顺序执行,并没有任何练习
&& 命令a && 命令b 命令a执行,命令b才执行,命令a不执行,命令b不执行
|| 命令a || 命令b 命令a执行,命令b不执行,命令a不执行,命令b执行

管道符

命令1 l 命令2

命令1的正确输出作为命令2的操作对象

作用有两个:
1、承上启下:把上一个指令的输出作为下一个指令的输入来执行。
2、搭配grep字符实现过滤功能。

grep

参数
-i:忽略大小写
-n:输出行号
-V:反向查找
--color=anto:搜索出的关键字用颜色显示

通配符

通配符 含义
? 匹配-一个任意字符
* 匹配0个或任意多个任意字符,也就是可以匹配任何内容
[] 匹配中括号中任意一个字符。例如: [abc]代表 一·定匹配其中一个字符
  • 其他特殊字符
字符 含义
’ ‘ 单引号。在单引号中所有的特殊符号,如“$”和“、、”(反引号)都,,没有特殊含义。
” “ 双引号。在双引号中特殊符号都没有特殊含义,但是“$”、和“\”是例外,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义。
` ` 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它,和$()作用一样
$() 和反引号作用一样,用来引用系统命令。
# 在Shell脚本中,#开头的行代表注释。
$ 用于调用变量的值.如需要调用变量name的值时,需要用$name的方式得到变量的值。
\ 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如$将输出“$”符号,而不当做是变量引用。

Bash 变量

什么是变量?

变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息时,如一个文件名或是-一个数字,就把它存放在一一个变量中。每个变量有一个名字,, 所以很容易引用它。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息。

  • 变量设置规则
  1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头
  2. 在Bash中, 变量的默认类型都是字符串型
  3. 变量用等号连接值,等号左右两侧不能有空格。变量的值如果有空格,需要使用单引号或双引号包括
  4. 在变量的值中,可以使用‘“\’” 转义符。
  5. 如果需要增加变量的值,那么可以进行变量值的叠加。
  6. 如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令。.
  7. 环境变量名建议大写,便于区分。
  • 查看变量
set   #查看所有的变量

env   #查看系统环境变量
  • 删除变量
unset 变量名

变量的分类

变量分类

  1. 用户自定义变量
  2. 环境变量:这种变量中主要保存的是和系统操作环境相关的数据。
  3. 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
  4. 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。

一、环境变量

用户自定义变量只在当前的Shell中生效
而环境变量会在当前Shell和这个Shell的所有子Shell当中生效
如果把环境变量写入相应的配置文件,那么这个环境变量就会.在所有的Shell中生效

  • 设置环境变量
export 变量名   #把自定义变量升级为环境变量
  • 系统常见环境变量
echo $PATH   #已经配置好的环境变量路径

PATH="$PATH"123   #把123脚本写进环境变量,是临时写入

/bin/   #此路径是环境变量搜索的地方
  • PS1定义系统提示符的变量

\d:显示日期,格式为“星期月日”
\h:显示简写主机名。如默认主机名“localhost"
\t::显示24小时制时间,格式为“HH:MM:SS"
\T:显示12小时制时间,格式为“HH:MM:SS”
\A:显示24小时制时间,格式为“HH:MM”
\u:显示当前用户名
\w:显示当前所在目录的完整名称
\W:显示当前所在目录的最后一个目录
\#:执行的第几个命令
\$:提示符。如果是root用户会显示提示符为“#”,如果是普通用户会显示提示符为“$”

PS1='[\[email protected]\h \w]\$ '

二、位置变量

位置变量 含义
$n n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如$ {10}.
$* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
[email protected] 这个变量也代表命令行中所有的参数,不过把每个参数区分对待
$# 这个变量代表命令行中所有参数的个数
  • 例题

(加法运算器)

#!/bin/bash

num1=$1
num2=$2
sum=$(( $num1 + $num2))   #变量sum的和是num 1加num2
echo $sum   #打印变量sum的值

三、预定义变量

预定义变量 含义
$? 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0则证明上一个命令执行不正确了。
$$ 当前进程的进程号(PID)
$! 后台运行的最后一个进程的进程号( PID)
  • 接受键盘输入 read
read

参数
-p:提示信息
-t:秒数
-s:隐藏输入信息
-n:输入时接收字符数量
#!/bin/bash
read -s -n 3 -t 30 -p "请输入你的名字: " num  //输入的数保存在num变量中
echo $num

环境变量配置文件简介

环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH、HISTSIZE、 PS1、HOSTNAME等默认环境变量。

  • 永久生效环境变量
  1. 修改配置文件里面的内容,
  2. 命令

为了不重启机器之后的环境变量失效,我们把脚本写进环境变量配置文件里面

下面两个方法可以不用重启机器就能执行,

. 配置文件,中间有一个空格

  1. source 配置文件
  2. . 配置文件
  • 环境配置的五个文件:

/etc/profile
/etc/profile.d/*.sh
~/ .bash profile
~bashre
/etc/bashrc

etc 下的配置文件,所有用户都能用,
家目录下的配置文件,只能对一个用户作用

  • 配置文件的过程


/etc/profirl的作用:

USER变量:二
LOGNAME变量:一
MAIL变量:
PATH变量:
HOSTNAME变量:
HISTSIZE变量:
umask:
调用/etc/profile.d/* .sh文件

~/.bash_profile的作用:

调用了~/.bashrc文件。”
在PATH变量后面加入了 “:$HOME/bin’ 这个目录

~/.bashsrc的作用:

命令定义的别名

/etc/bashrc的作用:

PS1变量
umask
PATH变量
调用/etc/profile.d/* . sh文件

  • Shell登录信息
  1. 本地终端欢迎信息:/etc/issue
转义字符 含义
\d 显示当前系统日期
\s 显示操作系统名称
\l 显示登录的终端号,这个比较常用。
\m 显示硬件体系结构,如i386、 i686等
\n 显示主机名
\o 显示域名
\r 显示内核版本
\t 显示当前系统时间
\u 显示当前登录用户的序列号
  1. 终端远程欢迎信息:/ect/issue.net

1、转义符在/etc/issue.net文件中不能使用
2、是否显示此欢迎信息,由ssh的配置文件/etc/ssh/sshd config决定, 加入“Banner/etc/issue.net"行才能显示(记得重启SSH服务),不过也不会认识转义字符

  1. 登录后欢迎信息:/etc/motd

不管是本地登录,还是远程登录,都可以显示欢迎信息

  • 其他配置文件
  1. 注销时生效的环境变量配置文件 ~/.bash_logout
  2. 历史命令保存的文件 ~/bash_history

数值运算

  • 第一种、 declare 声明变量类型

declare
参数
-:给变量设定类型属性
十:取消变量的类型属性
-i:将变量声明为整数型( integer)
-X:将变量声明为环境变量
-P:显示指定变量的被声明的类型

declare -i cc=$a+$b
echo $cc

#这样才能实现加法运算
  • 第二种、expr 或 let 数值运算工具

expr

c=$(expr $a + $b)

#  ‘ + ‘号左右必须有空格

let

let n+=1

let ee=$aa+$bb
  • 第三种、$((运算式)) 、 $[运算式]
cc=$(($aa+$bb))

cc=$[$aa+$bb]
  • 支持的运算符

在这里插入图片描述

变量测试于内容替换

在这里插入图片描述

shell编程

正则表达式

通配符和正则表达式的区别

  1. 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式。
  2. 通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、 find、 (cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。
  • grep
-v:取反
  1. 字符匹配
字符 代表含义
* 匹配其前面一个字符出现0次或者多次
. 任意字符
^ 匹配行首
$ 匹配行尾
[] 匹配括号里面的任意字符
[^] 匹配不已括号里面字符的项
\ 转义字符

字符截取命令

  • printf 行数据
printf '输出类型输出格式’ 输出内容

参数
%ns:输出字符串。n是数字指代输出几个字符
%ni:输出整数。n是数字指代输出几个数字
%m.nf:输出浮点数。m和n是数字,指代输出的整数位数和小数位数。如%8.2f代表共输 出8位数,其中2位是小数,6位是整数。

输出格式:

\a:输出警告声音
\b:输出退格键,也就是Backspace键
\f:清除屏幕
\n:换行
\r:回车,也就是Enter键
\t:水平输出退格键,也就是Tab键
\v:垂直输出退格键,也就是Tab键

  • cut 列数据

不能在 以空格分割 去查询

  • awk 列数据
awk ‘条件1{
    动作1} 条件2{
    动作2}’ 文件名

BEGIN条件:开始就会执行一段动作

END条件:结束的时候会执行一段动作

在awk命令的输出中支持 print 和 printf 命令

  1. print会 在每个输出之后自动加入一.个换行符(Linux默认没有print命令)
  2. printf是 标准格式输出命令,并不会自动加入换行符,如果需要换行,需要手工加入换行符
  • sed 行数据

vim 只能编辑文件
sed主要是用来将数据进行选取、替换、删除、新增的命令。
是一种几乎包括在所有UNIX平台(包括Linux) 的轻量级流编辑器。



参数
-n:一般sed命令会把所有数据都输出到屏幕如果加入此选择,则只会把经过sed命令处理的行输出到屏幕。
-e:允许对输入数据应用多条sed命令编辑
-i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出    

字符处理命令

  • 排序命令 sort
sort 文件名

参数
-f:忽略大小写
-n:以数值型进行排序,默认使用字符串型排序
-r:反向排序
-t:指定分隔符,默认是分隔符是制表符
-k n[,m]:按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)
  • 统计命令 wc
wc 文件名

参数
-l:只统计行数
-w:只统计单词数
-m:只统计字符数
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_55259539/article/details/114269041

智能推荐

Elasticsearch 权威指南(中文版)学习ELK值得可读的一本书!!!_学习elk的书_运维白菜鹏的博客-程序员秘密

这本书的链接:https://es.xiaoleilu.com/index.html提示:在elk路上越走越远!!!

20135202闫佳歆--week2 一个简单的时间片轮转多道程序内核代码及分析_weixin_30876945的博客-程序员秘密

一个简单的时间片轮转多道程序内核代码及分析所用代码为课程配套git库中下载得到的。一、进程的启动/*出自mymain.c*//* start process 0 by task[0] */ pid = 0; my_current_task = &task[pid]; asm volatile( "movl %1,%%esp\n\t" ...

wget安装flannel插件-连接失败_wget插件_Geray-zsg的博客-程序员秘密

wget安装flannel插件-连接失败使用wget下载flannel插件时连接失败,导致无法下载wget https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml失败信息正在解析主机 raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.1

NRF51822和NRF52832的简单介绍_Wang13631676419的博客-程序员秘密

1 功耗方面:nRF52832更是在nRF51822的基础上简直将功耗降低了一半2 更好的RF体现,主要是发射功率和接纳敏感度更好。发射功率,他哥俩适当,都是+4dbm ,nrf52832的灵敏度是 -96dbm,nrf51822的接纳灵敏度是 -93dbm。3 更强的处理才能,nrf52832的处理器M4,并非M4F,很多人都误会了,只有nRF52840才用的是M4F浮点运算内核。 nrf51822选用的仍是Cortex-M0内核。Cortex-M0内核是低功耗的内核,它合适收集传感器数据,在运

UWB相关技术之测距定位方法_uwb测距_剑侠蜀山的博客-程序员秘密

UWB测距定位方法UWB的测距定位方法主要有三种:ToF、TDoA、AoA。 ToFToF(Time of Flight),即飞行时间测量,通过直接计算两点之间的发射波与接收波之间的时间间隔实现距离的测量。图 1 ToF原理图ToF有两种应用方式:发射与接收时间同步、发射与接收时间不同步。发射与接收时间同步即Time Synchronized Transmitter and R...

leafLet之API翻译_偷得几日闲的博客-程序员秘密

LMapConstructor构造器Options选项Events事件Methods for Modifying Map State地图状态修改Methods for Getting Map State获取地图状态Methods for Layers and Controls图层控制Conversion Methods转换方法Other Methods其他方法Locate opti

随便推点

[RK3568 Android11] 开发之kernel和resource烧入(打包boot.img)方法_~未来可期~的博客-程序员秘密

目录前言一、在kernel目录下打包boot.img二、创建kernel专用编译脚本三、烧入boot.img方法前言 RK3568 Android11在单独调试kernel部分时,不想之前RK3288或者RK3399一样烧入kernel.img和resource.img,而是打包进了boot.img;但在调试时,使用build.sh来每次打包很麻烦,而且比较耗时; 现给出在编译kernel部分时,同时打包成boot.img,这样加快了我们开发的速度;...

乌班图、优麒麟系统开启root用户GUI登录_weixin_34407348的博客-程序员秘密

2019独角兽企业重金招聘Python工程师标准>>> ...

MATLAB仿真实现图像去噪_matlab汪汪队的博客-程序员秘密

摘要 数字图像处理是一门新兴技术,随着计算机硬件的发展,其处理能力的不断增强,数字图像的实时处理已经成为可能。由于数字图像处理的各种算法的出现,图像处理学科在飞速发展的同时逐渐向其他学科交叉渗透。数字图像处理是一种通过计算机采用一定的算法对图形图像进行处理的技术。这种处理技术已经在各个领域上都有了比较广泛的应用。图像去噪是数字图像处理中的重要环节和步骤。去噪效果的好坏直接影响到后续的图像处理工...

解决导出为Excel时文件名乱码的问题。_di80167的博客-程序员秘密

以前代码:public static void htmlToExcel(HttpContext context, string title, string html, string fileCss = "", string SheetName = "") { var Response = context.Response; ...

以pip安装prophet报错_Rory602的博客-程序员秘密

以pip安装prophet报错pip install pystan==2.19.1.1pip install prophet ModuleNotFoundError: No module named 'convertdate' ---------------------------------------- ERROR: Failed building wheel for prophet解决方案采用conda方式安装conda install gccconda install -

Thymeleaf使用number工具类对double/float型数据进行四舍五入处理_thymeleaf 四舍五入_其实不会敲代码的博客-程序员秘密

Thymeleaf使用number工具类对double/float型数据进行四舍五入处理Thymeleaf #numbers 显示千分位金额,保留小数位基本语法:#numbers.formatDecimal(num,整数位,整数位千分位标识符,小数位,小数位表示符)COMMA:’,’POINT:‘.’显示:99,999,999.991:表示整数位至少一位,不足以0补齐,如:num = 0.00,${#numbers.formatDecimal(num,0,‘COMMA’,2,‘POINT’)

推荐文章

热门文章

相关标签