bash shell
bash shell答疑解惑
大胃粥
掘金https://juejin.im/user/2805609401693943/posts
展开
-
shell 命令集合的执行方式
如果一个命令以&结尾,那么这个命令会在子shell中异步执行,也被称为异步命令。当前shell不用等到子shell执行完成,这个异步命令的返回状态永远是0 ( 表示成功 )。如果多个命令通过;分隔,那么这些命令顺序执行,当前shell会等到所有命令执行完毕。这个命令集的返回状态就是最后一个命令的退出状态。如果多个命令通过&&分隔,例如 command1 && command2,只有当 command1 命令的退出状态为0时,才会执行 command2。如果多个命原创 2021-07-17 15:39:07 · 212 阅读 · 0 评论 -
shell 引用
引用是用来移除某些字符或者单词的特殊含义。shell 有三种引用机制:转义字符。也就是反斜线 \。单引号。双引号。转义字符转义字符大部分情况是用来保护它后面字符的字面值,例如美元符号在 shell 中可以用来引用一个变量,例如$ foo=hello$ echo $foohello但是如果我们想输入5美元这样的字符串 $5 呢?那就有点问题$ echo $5显示的结果是一个空行。如果想输出 $5 ,可以使用转义字符来保留美元符号的原本的值$ echo \$5$5转义字原创 2021-07-15 23:22:41 · 393 阅读 · 0 评论 -
shell 展开之进程替换
shell 展开中的进程替换可以说是非常难懂的一部分,它的语法为有两种>(list)或<(list)语法中的list为一个或多个命令,用分号分隔。这两种语法的进程替换都被展开为一个文件描述符 /dev/fd/63,区别在于 >(list) 只接受输入,而<(list) 只能作为输出。在 << The Linux Command Line>> 一书中提到了这样一个事,代码如下echo david | read userecho $user #原创 2021-02-03 16:19:50 · 569 阅读 · 0 评论 -
shell展开之波浪线展开
波浪线展开其实挺简单的,通过几个例子了解下cd ~~ 会展开为家目录,也就是$HOME值。cd ~/work~/work 会展开为家目录下的work目录,也就是$HOME/work值。cd ~david/work~david/work 会展开为david用户的家目录下的work目录 。cd ~+/work~+/work 会展开为当前目录下的work目录,也就是$PWD/work值。cd ~-/work~-/work 会展开为前个工作目录下的work目录,也就是$OLDPWD/原创 2021-02-03 15:09:58 · 540 阅读 · 0 评论 -
shell 展开之花括号展开
花括号展开的形式花括号展开看如下一个例子$ echo a{b,c,d}eabe ace adea{b,c,d}e 是花括号展开的一种形式,其中 a 表示前缀,e 表示后缀,{b,c,d} 依次和前缀后缀结合。还有一种形式如下$ echo a{b..d}eabe ace ade其中{b..d} 表示 b 到 d 的一个区间。这个区间也可以用整数来表示,如下$ echo a-{1..3}-ea-1-e a-2-e a-3-e如果在整数前面加上0,那就表示宽度填充,如下$ echo原创 2021-02-03 13:55:52 · 529 阅读 · 0 评论 -
shell 上传文件到 smb 服务器
无意间发现可以使用 smbclient 命令自动把文件上传到 smb 服务器,出于时间关系,下面只给出简短的脚本演示#!/bin/bashlocal_upload_dir="/home/david/test_dir"smbclient //192.168.0.888/server/ -u Anonymous -d 1 << _EOF_prompt offcd david/mkdir test_dircd test_dirlcd ${local_upload_dir}mput原创 2021-01-29 16:34:04 · 1142 阅读 · 0 评论 -
shell pwd 命令
如果当前工作目录中包含符号链接,pwd 默认并不会输出实际的工作路径,而如果想输出实际的工作路径 ,需要加上 -P 参数david@:test$ pwd/home/david/shell_work/c++_work/testdavid@:test$ pwd -P/home/david/c++_work/testdavid@:test$ pwd -L/home/david/shell_work/c++_work/test-L 是 logical 的意思,-P 是 physical 的意思,原创 2021-01-28 19:51:51 · 15338 阅读 · 0 评论 -
Shell 管道的退出状态
管道命令的退出状态是由最后一条命令的退出状态。如果通过 set 命令设置了 pipefail 选项,那么只要有一条命令退出状态非0,那么管道的退出状态就是这个命令的退出状态,否则退出状态为0.ls hello | echo "hello"echo "\$? = $?"如果文件 hello 不存在,那么退出状态为0。set -o pipefaills hello | echo "hello"echo "\$? = $?"如果文件 hello 不存在,退出状态为 ls hello 命令的退出原创 2020-11-04 17:27:40 · 1026 阅读 · 0 评论 -
解析shell脚本选项
我们在命令行操作命令的时候,经常会带一些选项和参数来改变命令的行为。那么对于一个shell脚本,如果想利用选项和参数的功能,那么该如何解析它们呢?位置参数在执行shell脚本的时候,位置参数(positional parameters)会被赋值为shell脚本的参数。我们可以通过 ${N} 来获取位置参数的值,其中 N 大于等于 1。可以通过如下脚本查看位置参数的值#!/bin/bash...原创 2020-01-20 12:51:12 · 394 阅读 · 0 评论 -
Bash中的索引数组和关联数组
Shell 不提供数组,Bash 提供了一维索引数组和一维的关联数组。索引数组什么是索引数组?通过整数索引访问的数组就是索引数组。例如echo $arr[0]在 Bash 中,数组创建的方式很奇怪,我们可以不声明数组变量,直接给数组变量赋值,即可创建数组,例如arr=( hello world )...原创 2020-10-15 17:55:45 · 483 阅读 · 0 评论 -
shell重定向之Here Documents和Here Strings
Here Documents语法[n]<<[-]word here-documentdelimiter如果省略n,那么 Here Documents 会把 here-document 读入到命令的标准输入中,否则读入到文件描述符 n 中。word 后面不能有空格,delimiter 前后都不能有空白字符(空格,制表符)。如果 word 不加引号,那么 delimiter 值与 word 值一样,并且 here document 中可以支持参数展开,命令替换,以及原创 2020-09-25 17:23:56 · 763 阅读 · 0 评论 -
用好 if 中的 test 命令
test 命令的空格shell 的 test 命令用来测试一个表达式,例如#!/bin/bashif test -n $1; then echo "\$1 = $1"fi但是这种形式很丑陋,我们习惯在 if 语句后使用括号来执行判断语句,因此 test 命令有一个简写形式,那就是 [。对,你没有看错,test 命令的简写形式只有一个开括号 [,并不包括另外一个闭括号 ]。如果 t...原创 2020-01-20 14:32:53 · 2151 阅读 · 0 评论