首页 > 系统相关 >Shell命令-常用操作

Shell命令-常用操作

时间:2023-02-18 19:35:13浏览次数:42  
标签:选项 常用 Shell string 截取 echo 命令 字符串 格式

Shell基础

1 Shell命令的基本格式

基本格式

command [选项] [参数]

[]表示可选的,也就是可有可无。有些命令不写选项和参数也能执行,有些命令在必要的时候可以附带选项和参数。

短格式选项和长格式选项

Linux 的选项又分为短格式选项和长格式选项。

  • 短格式选项是长格式选项的简写,用一个减号-和一个字母表示,例如ls -l
  • 长格式选项是完整的英文单词,用两个减号--和一个单词表示,例如ls --all

一般情况下,短格式选项是长格式选项的缩写,也就是一个短格式选项会有对应的长格式选项。当然也有例外,比如 ls 命令的短格式选项-l就没有对应的长格式选项,所以具体的命令选项还需要通过帮助手册来查询。

2 单引号、双引号、反引号

  • 单引号:用于希望其中的内容原样输出的场景。

    a=123
    echo 'a=$a'
    echo 'echo 1'
    # 输出 a=$a ,不会做取变量的操作
    # 输出 echo 1,不会执行echo 1的命令
    
  • 双引号:用于希望在其中填充变量执行命令的场景。

    a=123
    echo "a=$a"
    echo "`cat 2.txt`"
    echo "cat 2.txt"
    # 执行结果
    # a=123 执行了取变量的操作
    # hello world! 执行了反引号中的命令
    # cat 2.txt 与写了反引号做对比
    
  • 反引号:用于在双引号中引用命令,表示执行这个命令。或者将命令的结果赋值给一个变量的场景。支持嵌套

  • 将命令的结果赋值给变量

    variable=`command`
    variable=$(command)
    # 推荐第二种方式,可读性更好,单引号与反引号不好区分
    
  • 变量的输出

    #!/bin/bash
    ps=`ps -ef`
    echo $ps
    
    ps1=`ps -ef`
    echo "$ps1"
    

    注意:如果被替换的命令的输出内容包括多行(也即有换行符),或者含有多个连续的空白符,那么在输出变量时应该将变量用双引号包围,否则系统会使用默认的空白符来填充,这会导致换行无效,以及连续的空白符被压缩成一个。

    具体执行效果可以运行上面的shell脚本,观察可知,带双引号的变量输出会保留原本的格式,而不带的,换行会被压缩一个空格,格式乱了,不利于接下来的过滤信息。所以推荐使用双引号来输出变量。

3 关于$*与$@

  • 相同点:两者都可用于从函数中取参数

  • 不同点

    • 当不被双引号包含时,两者没有任何区别

    • 当被双引号包含时,$@会将参数分割,而$*会将所有参数视为一个整体

#!/bin/bash

# $@ 不带双引号
for var in $@; do
  echo "$var"
done

# $* 不带双引号
for var in $*; do
  echo "$var"
done

# $* 带双引号
for var in "$*"; do
  echo "$var"
done

# $@ 带双引号
for var in "$@"; do
  echo "$var"
done

操作截图

4 字符串操作

4.1 字符串的赋值

可以使用三种方式进行字符串的赋值

a=string
b='string'
c="string"

4.2 字符串的拼接

直接进行拼接就好或者在双引号内部拼接

a="user"
b="wang"
echo "$a is $b"
# 输出 user is wang

4.3 字符串的截取

字符串的截取是经常用到的操作,例如路径截取、版本号截取

主要分为两种方式:

  1. 已知想要的字符串的起始和结束的下标,可以通过指定下标的方式截取

    语法:${string:start:length} 
    
  2. 已知想要的字符串是什么结构,不确定起始和结束的下标,可以通过子串匹配的方式截取

    ${string#*chars} # 使用#截取右边的所有字符,第一个匹配的
    ${string##*chars} # 使用##截取右边的所有字符,最后一个匹配的
    ${string%chars*} #使用% 截取左边的所有字符,第一个匹配的
    ${string%%chars*} #使用%% 截取左边的所有字符,最后一个匹配的
    

测试程序

#!/bin/bash
a='hello aa, hello bb'
# 1
echo "1 ---指定截取位置---"
# 指定截取位置 从左向右计数,下标从0开始计数
echo "${a:0:5}"
echo "${a:10}"
# 指定截取位置 从右向左计数,下标从1开始计数
echo -----
echo "${a:0-8:8}"
echo "${a:0-8}"

# 2
# 匹配子串
echo "2 ---匹配子串截取---" 
# 从左边开始匹配
echo "${a#*'hello'}" # 可以使用单引号引用字符串
echo "${a##*hello}"
# 从右边开始匹配
echo -----
echo "${a%hello*}"
echo "${a%%hello*}" 

汇总

格式 说明
$ 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。
$ 从 string 字符串的左边第 start 个字符开始截取,直到最后。
$ 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。
$ 从 string 字符串的右边第 start 个字符开始截取,直到最后。
$ 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
$ 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
$ 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。
$ 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。

4.4 字符串的替换

#用变量替换${a//}做字符串替换
${a/要被取代的字串/新的字串} # #变量a中的第一个匹配的字符串会被替换
${a//要被取代的字串/新的字串} #变量a中所有匹配的字符串都会被替换,多了一个 /
#用sed做字符串替换
sed 's/要被取代的字串/新的字串/' # 用来替换第一个匹配的字符串
sed 's/要被取代的字串/新的字串/g' # 用来替换所有匹配的字符串,多了一个 g

标签:选项,常用,Shell,string,截取,echo,命令,字符串,格式
From: https://www.cnblogs.com/Sun-yuan/p/17133350.html

相关文章

  • k8s 常用命令合集
    kubernetemaster只运行集群组件,nodes运行pods。Taints表示污点的意思,如果node描述信息有该选项表示不可调度.kubectldescribenodecentos-04取消污点kubectltaintn......
  • Hadoop-HDFS-shell命令
      第2章HDFS的Shell操作(开发重点)2.1基本语法hadoopfs具体命令 OR hdfsdfs具体命令两个是完全相同的。2.2命令大全[[email protected]]$......
  • linux命令
    Linux的基础使用命令基本格式Linux执行命令的一般格式:命令名称[命令参数][命令对象]命令名称、命令参数、命令对象之间用空格分隔。命令参数则可以用长格式(-......
  • 总结workerman启动与停止相关命令
    本篇文章给大家介绍一下workerman启动与停止相关命令。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。相关推荐:《workerman教程》start.php为入口文件......
  • 常用的24/22/16/8位网段详解
    24位网段10.8.0.0/24 10.8.0.0---10.8.0.254 0-255 1*256=256个ip10.8.20.0/24 10.8.20.0---10.8.0.254 0-255 1*256=256个ip10.8.100.0/24 10.8.100.0......
  • 数据类型及常用方法
    引入我们学习变量是为了让计算机能够像人一样去记忆事物的某种状态,而变量的值就是用来存储事物状态的,很明显事物的状态分成不同种类的(比如人的年龄,身高,职位,工资等等),所以变......
  • ctfshow web入门 命令执行 web58-71
     都是POST传递参数执行eval()函数web58if(isset($_POST['c'])){$c=$_POST['c'];eval($c);}else{highlight_file(__FILE__);}没有进......
  • linux基本功系列之fdisk命令实战
    前言大家好,又见面了,我是沐风晓月,本文是专栏【linux基本功-基础命令实战】的第49篇文章。......
  • 12. IDEA常用插件
    恐惧是本能,行动是信仰(在此感谢尚硅谷宋红康老师的教程)推荐1:AlibabaJavaCodingGuidelines阿里巴巴Java编码规范检查插件,检测代码是否存在问题,以及是否符合规......
  • MySQL的几个常见命令
    1、查看mysql的安装路径进入到mysql的命令行或者mysql可视化查询工具的界面,输入下面的指令showvariableslike"%char%";character_sets_dir就是mysql的安装目录2、......