一文读懂shell命令

01、shell解释器使用优先级别

  • 1、显示指定的解释器: /bin/bash ./first.sh

  • 2、脚本文件首行指定默认:./first.sh

    #!/bin/bash
    
  • 3、系统默认

02、shell脚本运行方式

  • 1、显示指定解释器运行: /bin/bash ./first.sh
  • 2、使用默认解释器:./first.sh
  • 3、使用source.运行
    • source ./first.sh
    • . ./first.sh

03、变量基本定义

shell脚本语言中,值的类型只有一种——字符串!

赋值符号两侧绝对不能有空格!

bash解释器,在解释一行代码的时候,是按照空格作为命令的边界!

  • name=weiwei
  • name='weiwei'
    • 单引号定义的值内部不会帮助我们做变量值的替换
  • name="weiwei"
    • 双银号定义的值内容会帮助我们替换变量值

04、特殊的变量:命令变量

把一个命令的执行结果,作为一个变量使用!
在这里插入图片描述

05、变量取值

  • $变量名
  • ${变量名}
    • 优点:定义了变量名的范围,避免冲突
  • "${变量名}"

06、删除一个变量

unset 变量名

07、环境变量(全局变量)

一个环境变量,只作用于当前环境(一个交互终端就是一个独立的环境!)

环境变量的意义:为程序运行,提供一些参数;通过环境变量,传递一些参数!

定义方式:

# 定义的时候使用export修饰
export name=haige

# 先定义后修饰
name=haige
export name

07-1、变量的默认值

${变量名:-默认值}

  • 变量定义了,则使用定义的值
  • 变量未定义,使用默认值
  • 如果变量定义了,但是值为空,使用默认值

${变量名+默认值}

  • 变量必须定义,才能起效果
  • 变量定义了,但是值为空,则强制使用默认值
  • 即使变量定义且有值,忍让强制使用设置的默认值

08、表达式

运算符和参与运算的对象,组合而成的一个式子:1+2

shell中判断一个表达式是否正确(成功返回0,失败返回1):

  • test 1 == 2
  • [ 1 == 2 ]

08-1、逻辑表达式:

  • &&: 表示并且,等同于python中的and
  • ||:表示或者,等同于python中的or

08-2、文件表达式:

  • [ -f 文件名 ]:判断是否是一个普通文件
  • [ -d 文件名 ]: 判断是否是一个文件夹
  • [ -x 文件名 ]:判断该文件是否有可执行权限

08-3、数值比较运算:

  • [ 1 -eq 2 ]: 相等比较
  • [ 1 -gt 2]: 大于比较
  • [ 1 -lt 2]: 小于比较
  • [ 1 -ne 2 ]: 不等比较
  • [ 1 -ge 2 ]: 大于等于比较
  • [ 1 -le 2 ]: 小于等于比较

08-4、字符串比较:

  • [ str1 = str2 ]: 字符相等
  • [ str1 == str2 ]:字符相等
  • [ str1 != str2 ]: 字符不等

08-5、运算表达式:

不支持浮点数,只支持整数运算;

  • count=$((运算表达式))
  • let count=运算表达式

09、Linux常用的符号

09-1、输出重定向符号

默认的重定向符号,只把标准输出重定向!

  • >: 把原来输出的数据,以覆盖的方式写入文件中;
  • >>:把原来输出的数据,以追加的方式写入文件中;

1、指定标准输出(正常的打印信息)重定向

env 1> data.txt

2、标准出错(异常报错信息)重定向

env 2> data.txt

3、所有程序输出重定向

env > data.txt 2>&1

09-2、管道

作用:把管道左侧指令的标准输出重定向给管道右侧指令的标准输入!

env | grep 过滤词

09-3、执行命令尾部加上&号: sleep 10 &

快捷键ctrl + z

作用:把当前占用终端的程序,挂起放在后台任务中;

  • fg 后台任务序号: 把后台任务重新调回终端前台运行;
  • jobs:查看当前终端的挂起的所有后台任务;

10、黑洞文件/垃圾桶文件

文件位置:/dev/null

11、常用命令

11-1、grep命令查询/检索文件内容

行为:按行检索文件内容,返回结果为命中的行数据;

格式: grep [-cnvr] [检索词] [文件名]

  • -c: 显示匹配到的总行数
  • -n:显示匹配到的行信息和行号
  • -v:取反
  • -r: 如果被检索的文件是一个文件夹,需要加这个参数,对目标文件夹中的文件遍历检索

11-2、sed命令修改文件内容

格式:sed -i 's/原内容/新内容/' 文件名

  • 指定行修改: sed -i '行号s/原内容/新内容/' 文件名
  • 指定列修改: sed -i 's/原内容/新内容/列号' 文件名;列号为"g"表示所有修改:sed -i 's/原内容/新内容/g' 文件名

额外参数:

  • a参数: 指定行下方插入一行sed -i '行号a\新行内容'
  • i参数: 指定行上方插入一行sed -i '行号i\新行内容'
  • d参数: 指定行删除sed -i '行号d'

11-3、awk命令查看文件

按行检索,按空格划分每一列

  • 查看指定awk '{print $1}' awk.txt
  • 查看所有列awk '{print $0}' awk.txt
  • 显示行号awk '{print NR,$1}' awk.txt
  • 指定没列的分割符号awk -F ':' '{print $1,$7}' linshi.txt
  • 指定输出列的连接符号awk 'BEGIN{OFS=":"} {print NR,$0}' awk.txt

11-4、find命令搜索文件

格式:find [路径] [参数] [关键字]

  • -name 按照文件名查找文件。
  • -perm 按照文件权限来查找文件。
  • -user 按照文件属主来查找文件。
  • -group 按照文件所属的组来查找文件。
  • -type 查找某一类型的文件
    • d文件夹
    • f普通文件
  • -size: 文件大小,单位bcwkMG

12、零零碎碎的

Linux系统有一个概念:一切皆文件

计算机一个程序,一旦运行起来,会有3个输出/输入的方向!

1、标准输出stdout —— 终端屏幕

2、标准输入stdin —— 键盘

3、标准出错stderr —— 终端屏幕

总结

个人记录,新手入门,多多学习,欢迎大家交流探讨!
个人网站: http://106.54.78.238/
song_of _sea的个人网站 http://106.54.78.238/

猜你喜欢

转载自blog.csdn.net/weixin_44824717/article/details/108014699