首页 > 系统相关 >shell 命令的一些基本用法

shell 命令的一些基本用法

时间:2023-11-10 12:11:34浏览次数:24  
标签:字符 shell 匹配 输出 -- echo 命令 用法

0 背景

在使用shell的时候,总是有些不习惯,记录一下常用的用法吧。

一、符号

1.1 引号 

Shell中有三种引号,分别为双引号(" ")、单引号(' ')以及反引号(` `)

含义:

双引号(" "):在双引号中,除了$, '', `和\以外所有的字符都解释成字符本身。
单引号(' '):在单引号中所有的字符包括特殊字符($,'',`和\)都将解释成字符本身而成为普通字符。
反引号(` `):在反引号中的字符串将解释成shell命令来执行,并返回执行结果。

示例:

 

$ a=1
$ echo $a
1

$ echo 'this is $a' #单引号
this is $a

$ echo "this is $a"  #双引号
this is 1

$ a=`ls` 
$ echo $a  #反引号,显示执行ls命令后的结果

使用变量与其它字符连接时,可以如下如下使用
$ echo ${a}_2
1_2

  

1.2 重定向

含义:

> 输出重定向,可以把内容输出到文件中,但是会覆盖文件中原来的内容;
>> 输出重定向,可以把内容输出到文件中,不会覆盖文件中原来的内容,而是追加输入到文件中
< 输入重定向,可以把文件的内容输入到一个变量上

示例:

$ echo "hello" > file  #将字符串“hello”输出到文件file 中

$ echo "hello" >> file  #将字符串“hello”追加输出到文件file 中

$ resd x < file   #把file 文件中的内容输入到x (read 命令一次读取一行)
$ echo $x
xxxx #file文件中的内容

  

扩展:

$ ls ddd > a 2>&1    #前提,已建立了文件a,2代表当前的标准错误输出,1代表标准输入。
2>&1 该命令的意思:将ddd输入到文件中,若报错,将报错信息也输入到文件a中,若正常执行,则将正常执行的结果输入到文件a中;2>&1 该命令是一个固定模式,不能修改

 

1.3 括号

$() 在括号中执行的的子 shell,相当于函数的作用域。而 {} 执行的是当前的语句块

$(a=1)
$echo $a   #不会显示 1

 

1.4 $$ 

$echo $$  #查看当前的进程的ID

1.5 $!

$echo $!   #返回当前进程的最后一个进程的 ID

1.6 &

“&”字符表示该操作在后台进行,且不影响当前界面进行其他操作

$for ((i=0;i<5;i++));do echo $i;sleep 2;done &   #每两秒操作操作一次字符,并且是后台运行。

1.7 (()) 与 $!

(()) #对变量进行操作,把括号中的变量当做整数去处理
echo $? 表示上一个语句是否执行正确,返回响应的值,在bash中,0代表true,所有非0的代表false
注意,针对的是上一个语句,整个表达式的执行

$ a=2;b=3
$ echo $((a+3))
5

$ a=1;b=3
$ (($a>$b));echo $?
1

1.8  |、|| 、& 、&&

  • 管道前面是内容,管道后面是命令,前面命令的输出作为'|'后面的输入
$ echo adbc | grep -o c 前面的 adbc 通过后面的精准匹配 c 符号,然后输出
c
  • 双竖线‘||’,用双竖线‘||’分割的多条命令,执行的时候遵循如下规则,如果前一条命令为真,则后面的命令不会执行,如果前一条命令为假,则继续执行后面的命令。可以表示为“或”
  • “&” 同时执行多条命令,不管命令是否执行成功
  • “&&” 可同时执行多条命令,当碰到执行错误的命令时,将不再执行后面的命令。如果一直没有错误的,则执行完毕。

二、命令

2.1 一些快捷操作命令

$ echo $PWD     #返回当前的目录路径
$ echo $USER   #返回当前用户名
$ echo $HOME  #返回当前的目录路径 等价于 $ echo ~
$ echo $PATH   #返回当前的环境变量的内

$ ls -l  #显示当前目录下的文件具体信息,如权限、大小、创建时间、文件名字等,可以简写为 $ ll
$ ls -al  #显示当前目录下的文件具体信息,包含了隐藏文件一起显示

$ which  #加文件名 例如 $ which python 是从当前的环境变量中查找该文件的安装位置
$ export PATH=$PATH:$PWD  #把当前的目录的添加到当前的系统变量中

$ cd expert/  #进入expert/目录
$ cd ..   #回到上一层目录
$ cd   #回到根目录

$jobs   #显示当前进程的状态

2.2 seq

seq 命令,给定初始值和终值,构建一串序列

2.3 grep

grep [OPTIONS] "PATTERN" [FILE...]
Options:
    -E, --extended-regexp  # equal to "egrep"
    -i, --ignore-case      # 忽略大小写
    -n, --line-number      # 显示行号
    -v, --invert-match   
    -o, --only-matching    # show only the part of a line matching PATTERN,精准匹配
    -r "PATTERN" DIR    # 根据文件内容, 查找文件
    -A NUM, --after-context=NUM
    -B NUM, --before-context=NUM
    -C NUM, --context=NUM
    --color

2.4 curl 

status=$(curl -I -m 10 -o /dev/null -s --head -w %{http_code} $url)
status=$(curl -s --head $url | head -n 1 | awk '{print $2}')

以上两句都是匹配某个 URL 进行请求后返回的状态码,并赋值给 status 变量,部分命令解释:

# -I 只显示http response的头信息
# -m 10 最大传输时间10s
# -o /dev/null 屏蔽原有输出信息
# -s silent 模式,不输出任何东西
# -w %{http_code} 控制额外输出
# --head 显示http response的头信息,不包含网页代码
# head -n 1 指定需要输出的文本行数量

三、数据操作

3.1 特殊字符处理

$ echo -e "a\nbb"   #-e 开启转义功能,不开启,输出的是 a\nbb
a
bb

3.2 数组处理

$ array=(1 2 3 4 5)
$ echo ${array[@]}  #@不管加不加双引号,都当做数组处理
1 2 3 4 5
$ echo ${array[*]}  # * 当加上双引号时, 把数组中的值都当做字符串处理
1 2 3 4 5
$ echo ${#array[@]} #返回数组中有多少个元素
5
$ echo ${array[2]} #通过数组下标索引输出元素
3

3.3 字符串

3.3.1 字符串操作

$ s="hello from testerhome"
$ echo ${s:6} #从字符串的第六个字符开始输出,类似python的切片
from testerhome
$ echo ${s:6:3} #截取从字符串的第六个字符开始,到后面的第三个字符,然后输出
fro
$ echo ${s#hello} #将指定的字符/字符串去掉(默认包含了前后空格,从头部开始匹配),然后输出
from testerhome
$ echo “${s#hello}” #将指定的字符/字符串去掉(加双引号不包含前后空格),然后输出
from testerhome
$ echo ${s#*m} #采用了正则匹配,*是通配符,代表任意字符,m只匹配一次(非贪婪匹配)
testerhome
$ echo ${s##*m} #采用了正则匹配,*是通配符,代表任意字符,m匹配多个(贪婪匹配)
e
$ echo ${s%home} #将指定的字符/字符串去掉(默认包含了前后空格,从尾部开始),然后输出
hello from tester
$ echo ${s%h*} #采用了正则匹配,*是通配符,代表任意字符,h只匹配一次(非贪婪匹配),从尾部开始匹配
hello from tester

$ echo ${s/from/to} #替换字符串,第一个斜杠后边是被替换的字符,第二个斜杠后边是要替换的字符,只匹配到识别的第一个字符。贪婪匹配模式可以参照上面的例子。
hello to testerhome

  

 

3.3.2 字符串比较

 

3.3.3 字符串替换

 

四、综合

按键盘 CTRL+Z ,会把当前正在执行的进程暂停,然后放到后台,按 CTRL+Z 后,程序会给被暂停的进程一个标识号。
若想把被暂停的进程调回来继续执行,使用命令  bg  +  标识号;
若被调到后台的进程想调到前台,使用命令  fg + 标识号

 

标签:字符,shell,匹配,输出,--,echo,命令,用法
From: https://www.cnblogs.com/haoran123/p/17823677.html

相关文章

  • Linux命令(72)之bunzip2
    linux命令之bunzip21.bunzip2介绍linux命令bunzip2是用来解压缩后缀为".bz2"的文件,等价于bzip2-d2.bunzip2用法bunzip2[参数]filename.bz2bunzip2常用参数参数说明-f强制覆盖已存在的文件-k解压缩后,保留源文件-v显示命令执行详细过程3.实例3.1.解压缩zzz.txt.bz2文件,保留......
  • linux内核 快速分片,技术|Linux slabtop命令——显示内核片缓存信息
    Linux内核需要为临时对象如任务或者设备结构和节点分配内存,缓存分配器管理着这些类型对象的缓存。现代Linux内核部署了该缓存分配器以持有缓存,称之为片。不同类型的片缓存由片分配器维护。本文集中讨论slabtop命令,该命令显示了实时内核片缓存信息。1.命令用法:该命令用起来很简单......
  • Kubernetes常用命令及yml文件、集群网络 Kubernetes组件介绍及环境搭建
    Kubernetes常用命令及yml文件、集群网络Kubernetes组件介绍及环境搭建Kubernetes组件介绍及环境搭建一、kubernetes常用命令说明:因为k8s的命令都是通过kubectl组件接收的,这个组件只在master节点有,所以k8s的命令都是在master节点中执行kubectlgetnodes#查看当前集群中......
  • windows10 使用Xshell时出现丢失msvcr110.dll
    Xshell启动报错如下:无法启动此程序,因为计算机中丢失MSVCR110.dll。尝试重新安装该程序以解决此问题。解决步骤如下:(亲测有效)1.进入网址:https://www.microsoft.com/zh-CN/download/details.aspx?id=30679点击下载; 2.下载以下两个程序包; 3.下载完成后依次安装 安装后......
  • Net 高级调试之七:线程操作相关命令介绍
    一、简介今天是《Net高级调试》的第七篇文章。上一篇文章我们说了值类型,引用类型,数组等的内存表现形式。有了这个基础,我们可以更好的了解我们的程序在运行时的状态,内存里有什么东西,它们的结构组成是什么样子的,对我们调试程序是更有帮助的。今天,我们要说一些和线程有关的......
  • Linux文件处理命令
    概述场景引入分布式系统面临的配置问题微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。SpringCloud提供了Confi......
  • 命令文件后台运行即隐藏黑窗口
    win系统下第一种方法:bat后台运行https://www.cnblogs.com/sheng-247/p/10528160.html直接让bat窗口在后台运行,在你的bat脚本最开始加上这三行:if"%1"=="hide"gotoCmdBeginstartmshtavbscript:createobject("wscript.shell").run("""%~0""......
  • 容器,镜像和仓库关系及命令
    前言因软考高级的系统分析师考试中涉及到很多容器相关的知识,所以决定好好整理一下这部分的内容,加深理解!概念1.镜像:一个只读的文件和文件夹组合(静态的可读文件),是容器运行的基础,包含容器运行所需要的基础文件和配置信息(来源:自行制作,镜像仓库拉取dockerhub)2.容器:镜像的运行实体,......
  • 2023-11-10 linux常用命令(长期更新)
    ls:列出当前目录下的文件和文件夹。cd:切换目录。pwd:显示当前所在的目录路径。mkdir:创建一个新的目录。rm:删除文件或目录。cp:复制文件或目录。mv:移动文件或目录,也可用于重命名文件或目录。touch:创建一个新的空文件或更新已有文件的访问时间和修改时间。cat:将文件内容输出到......
  • 常见诊断网络连接是否正确的命令
    背景经常我们需要确认我们使用的主机与目标主机是否连通,若不连通的话,其中在哪里断开测试是否连通:pingip,可选参数-n(定义发送数据包的个数),-t(不间断向目标地址发送数据包,直到我们强迫其停止),-l(设置数据包的大小,一般默认32字节)测试连通路径上有哪些ip:windows使用命令tracert......