欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > shell命令笔记

shell命令笔记

2025/2/24 13:01:48 来源:https://blog.csdn.net/cat_with_cat/article/details/142420918  浏览:    关键词:shell命令笔记

前言

本文不是系统学习shell的笔记 只是记录我写代码是遇到的一些记录

set -eo pipefail

这条命令出现在脚本第一行

  1. set -e
    告诉shell 脚本中有语句执行返回值不为0的时候 直接退出
  2. set -o pipefail
    将返回管道中最后一个返回值不为0的管道的返回值

dirname

保留最后一个 / 及其前面的字符

#代码举例
dirname path

将当前路径去除掉path后返回

$0

表示的是脚本文件的当前路径

那么和dirname结合 就能得到当前目录下的路径

赋值

可以直接采用$var或者 ${var}的方式来赋值

等号左右不能有空格

推荐用${var}的方式
因为:

#假如这里有两个字符串VA 和 VALUE
#想都赋值给VAR
VAR=$VAVALUE
#但实际是将VAVALUE赋值给VAR

用()

只是字符串的话 不可以用()来赋值

  1. ()用于子进程的命令替换:执行()中的命令,并返回命令的返回值
ROOT=$(dirname "$0")
  1. 创建子进程执行命令而不影响父进程
(cd /ROOT && ls)

命令替换

上面提到()是用来进行命令替换的
命令替换还有一种方法

  1. ``
    这种可读性低不建议

  2. $()
    命令替换的过程
    a. 会识别到 $(cmd) 然后创建子shell来执行命令cmd
    b.之后将子shell的标准输出返回原命令

$

这是补充的第一点 因为我经常忘记写$
没有$的话,你写的只是普通的字符 而不是变量!!!!!

$

$有很多参数 下面是一个总结
在这里插入图片描述

||

第一个|是管道的意思

第二个的| :
是一种“空操作”,意味着如果前面的命令(包括 Perl 命令)失败(即返回非零状态),将执行一个空操作。这样做的目的是避免脚本因错误而中断。

输出标准错误

我们学过文件描述符,知道0、1、2分别对应标准输入、标准输出、标准错误,也学过如何重定向(>),&的意思是等价,即定向到同一个地方

ls > output.txt  # 将标准输出重定向到 output.txt
ls 2> error.txt  # 将标准错误重定向到 error.txt

我们想直接将命令的标准错误显示在终端上就可以这么写
(也就是标准错误和标准输出都输出到终端上

ls mydir 2>&1

命令太长:反斜杠

    cv=$(mysql -h$FE_HOST -P$FE_QUERY_PORT -u$USER -e 'admin show frontend config' | grep 'stream_load_default_timeout_second' | awk '{print $2}')

使用管道的时候,命令太长了 写在一行里可读性差,分成两行就好了
需要在管道的后面写上反斜杠

反斜杠的另一个作用:转义特殊字符

他可以让后面紧接着的特殊字符失去特殊含义
比如:

echo \$n
\$n

$失去了它的作用
但用的比较少

printf和echo

在大佬的建议下学习了printf和echo的区别
(我刚知道可以用printf

计算长度

printf给多长就会计算多长,而echo会将字符串的最后换行符也计算在里面

转义字符

printf可以直接识别‘\n’、'\r’等转义字符
但当我们

echo “1\n2"
1\n2

的时候,发现直接输出1\n2 因为想识别转义字符,需要写上-e参数

echo -e “1\n2"
1
2

printf为什么好?

  1. printf兼容性非常好 ,任何unix系统的版本都能兼容(因为unix使用c写的)
  2. printf能对输入字符串的内容进行格式化与显示宽度的控制

    引用文章:Echo与Printf回显命令差异分析与应用
    这篇文章讲的很详细

‘’ 与""的区别

上一条的printf里提到“”,那么双引号和单引号有什么区别呢

‘’

被单引号括起来的内容,其中的空格、特殊字符都不会对shell产生任何影响,他就是一个字符串

“”

双引号同样会忽略空格,但有三个他不会忽略
*$ 和 ` 和 *

[]与[[]]

在如if、for语句等的时候,我们需要做判断,可以写[]、test、[[]]这三种方式( [命令与test等价
需要注意 [和 [[都是独立的命令 后面需要有空格

]只是 [ 命令 的一个参数

怎么加引号

我产生里一个疑问 什么时候我要加双引号,什么时候不用
这里的建议是在:
数值比较不用加双引号
字符串比较加双引号
变量加双引号

test命令

text命令其实就是if []

参数使用

下面介绍一些参数

  • ! 取反
  • -a 表示与操作
  • -o 表示或操作
  • -e 文件名 如果文件存在则为真
  • -s 文件名 如果文件存在且至少有一个字符则为真
  • -d 文件名 如果文件存在且为目录则为真
  • -f 文件名 如果文件存在且为普通文件则为真

test与[[]]的区别是 test不支持写&& || 而[[]]

代码举例

#!/bin/bashstr1="hello"
str2="world"if [ "${str1}" = "${str2}" ]; thenprintf "The strings are equal\n"
fi
#!/bin/bashstr1="hello"
str2="world"if [[ $str1 == "hello" && $str2 == "world" ]]; thenprintf "Both strings match!\n"
fi
#!/bin/basha=5
b=10if test $a -lt $b; thenprintf "%d is less than %d\n" $a $b
fi

总结

就暂时写着么多

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词