这在定义一个名称与 Shell 内置命令相同的函数时非常有用,可以在函数内通过 builtin 使用内置命令。...builtin 命令用以执行 Shell 内建命令,既然是内建命令,为什么还要以这种方式执行呢? 这个 Shell 命令的搜索顺序有关: 别名,使用alias创建的命令。 关键字,如if,for。...函数 内置命令,如cd,pwd等 外部命令,在PATH路径中寻找 因为 Shell 命令执行时函数优先于内建命令,如果自定义了一个与内建命令同名的函数,那么会执行这个函数而非真正的内建命令。...虽然使用 builtin 可以显示执行内部命令而非同名函数,但是在编写 Shell 函数时,还是建议尽可能避免同名,提高代码可读性。...2.命令格式 builtin shell-builtin [arguments] 3.选项说明 无。 4.返回值 如果给定的命令不是 Shell 内置命令,则返回状态为 false。
,它的值通常是/bin/bash [dyx@VM-8-13-centos test_static]$ echo $SHELL /bin/bash [dyx@VM-8-13-centos test_static...和环境变量相关的命令 echo: 显示某个环境变量值 export: 设置一个新的环境变量 如果不用export我们创建的叫做本地变量,env显示不出来但是echo可以查到 env:...环境变量们默认在bash内部 [dyx@VM-8-13-centos test_static]$ echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/...理解 export 和 echo 作为内建命令的含义,涉及到它们的作用、执行方式以及为什么它们被设计为内建命令。...例如,执行 echo HOME 时,echo 内建命令可以直接访问并展开 HOME 环境变量,显示当前用户的主目录路径。 你可以使用 type 命令在 Bash 中检查一个命令是否是内建的。
图形界面shell就是 GUI shell,而命令行式shell在Windows中为 cmd.exe命令提示字符、在Linux中则是 bash等等。.../bin/bash a="$1" echo "您选择的套餐为: 套餐 ${a:-1}" 我们在终端中执行下面的命令分别得到结果如下: bash hello.sh 您选择的套餐为: 套餐 1 bash...这两条命令其实还可以一起使用: bash test.sh 1>> test-ok 2>> test-err 最后会将正确输出的内容,输入到 test-ok文件中;将报错信息输入到 test-err文件中.../bin/bash echo '下一条错误命令' dsfsafsafdsa 下面执行一下脚本: ethanyan@ethanyan-PC:~$ bash test.sh 下一条错误命令 test.sh...我们使用全部信息: bash test.sh >> test-all 2>&1 然后我们查看文件 test-all: ethanyan@ethanyan-PC:~$ cat test-all 下一条错误命令
/test.sh当前路径下执行(相对路径) /home/acs/test.sh绝对路径下执行 ~/test.sh家目录下执行 用解释器执行 bash test.sh echo 意思和c++中cout 或...否则会报错 使用变量 使用变量需要加上¥(此符号在bash中意为取值),或者$(),花括号是可选的,主要是为了帮助解释器识别边界 echo $yxc echo $(yxc) echo会自动换行 错误:echo...超过等待时间后会自动忽略此命令 echo命令(相当于cout或printf) 输出格式:echo STRING 显示普通字符串:echo “Hello acterminal”,引号也可以省略 显示转义字符...显示结果到echo “Hello world” > output.txt 原样输出字符串,不进行转义或取变量:用单引号引起来 显示命令的执行结果:用`引起来 printf语句(c++中是以,隔开每一项...&取值出现错误(too many arguments)) 中括号内的常熟,最好用单或双引号括起来 判断语句 if then语句,(类似与c++中的if-else语句)if后面跟的是命令,不是值 if expr
15.1 理解输入和输出 现在知道两种显示脚本输出的方法 1)在显示器屏幕上显示 2)将输出文件重定向到文件中 15.1.1 标准文件描述符 Linux系统将每个对象当做文件处理。...>> 表示追加到文件 注意:用了输出重定向,shell并未将错误消息重定向到输出重定向文件中。错误消息仍会显示在显示器中。 3.STDERR 标准错误(2) STDERR文件描述符来处理错误消息。...15.3 在脚本中重定向输入 exec 命令允许你将STDIN重定向到Linux系统上的文件中。 例子:查看test2中的数据 1 #!.../bin/bash 2 exec 0test2 # 输入重定向到test2中 3 echo "test2:" 4 count=1 5 while read line 6...意味着给3的数据都将出现再显示器上 4 exec 1>test5log.txt # 将STDOUT重定向到文件。但是3仍然指向STDOUT原来的位置,也就是显示器。这时给3发会显示在显示器中。
$- 显示Shell使用的当前选项,与set命令功能相同。 $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 #!/bin/bash echo "Shell 传递参数实例!"...在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用两个命令来实现该功能:break和continue。...后台运行的最后一个进程的ID号 $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。 $- 显示Shell使用的当前选项,与set命令功能相同。 $? 显示最后命令的退出状态。...0表示没有错误,其他任何值表明有错误。 数组 1 定义数组 数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(。....sh,在test1中定义一个变量arr=(java c++ shell),在test2中对arr进行循环打印输出。
/bin/bash echo "guoke123" [root@game scripts]# sh -n test7.sh #脚本没有语法错误,所以没有输出 #演示脚本存在语法错误 #!...set -v :显示读取的所有行 set -x :显示所有命令及其参数 #使用 使用set -x可以缩小调试的作用域范围 set -x开启调试功能,set +x关闭调试功能 #示例 #!...命令调试 一般在可能出现问题的脚本的重要部分加入echo命令 #示例 [root@game scripts]# cat test8.sh #!...5.shellcheck shellcheck是一个可检查sh/bash脚本和命令语法的小工具 #常见的shell脚本错误示例 #1.中括号两端没有空格 [root@game scripts]# cat...sh: line 5: `else' #执行脚本之后会提示语法错误 #需要注意的是shell脚本解释器一般不会很精确的定位到错误,需要上下联都看一下 #总结 在进行脚本编写的过程中,应该注重书写的规范性
/test1 # 成功运行脚本2017年 07月 26日 星期三 10:09:23 CSTwsx tty7 2017-07-26 09:48 (:0) 显示消息 在 echo命令后面加上一个字符串...tty7 2017-07-26 09:48 (:0) 如果想把文本字符串和命令输出显示在同一行中,可以用 echo语句的 -n参数。...使用方括号 bash shell提供了一种更简单的方法来执行数学表达式。在bash中,在将一个数学运算结果赋给某个变量时,可以用美元符和方括号($[operator])将数学表达式围起来。...它实际上是一门编程语言,它允许在命令行中输入浮点表达式,然后解释并计算该表达式,最后返回结果。...0 按照惯例,一个成功结束的命令的退出状态码是0。如果有错误,则显示一个正数值。
但这里推荐使用双中括号,因为它的容错率更高,而且支持更多功能。另外,在 Linux 中单中括号 [ 实际与 test 命令是等价的,因此用双括号显然能避免更多的麻烦。...除了使用双中括号之外,还可以用 test 命令的运行结果作为 if 语句的判断条件,例如: test -e /tmp/awesome.txt 如果 awesome.txt 文件存在,则命令返回 0,否则返回错误码...关于返回值 每一个 Linux 程序都有返回值,按照规范,这个返回值在 0-127 之间,0 表示成功,其他值是含义各不相同的错误码。在 Bash 中充分利用这一点可以增加程序的灵活性。...使用后台任务 在 Bash 中,可以通过在命令后添加 & 符号实现后台多任务。例如: long_running_command & 把进程放入后台后,还可以通过 fg 命令将其切换到前台。...此外还可以通过 set -o 显示所有可以设置的选项。 这也是为什么许多 shell 脚本都以 set -eu 或者 set -eux 等做为开头的原因,因为这样就可以让脚本运行在更安全的环境下。
当输入的数据量多于变量的个数时,那么超出的数据将被赋值在最后一个变量中。例如: #!/bin/bash read -p "input your name!".../test.sh 解释:exec 3test.txt执行重定向shell命令,将test.txt文件内容重定向到描述文件3中。然后从3中读取内容复制给变量var。最后关闭文件描述编号为3的内容。.../bin/bash count=1 while read line do echo "Line $count:($line)" let count=$count+1 done test.txt echo...需要注意的是,在shell脚本中alias别名默认是关闭的,在shell里面执行命令是重新生成一个子进程。所以你可以通过login 选项来设置。 #!...16 ## 高级点的用法是搜索曾经的命令 Ctrl+R history -c:清空所有的历史命令 history -w: 内存中的历史命令覆盖.bash_history history的配置 #显示命令时间戳
这个脚本产生了两个错误。有趣地是,所报告的行号不是引号被删除的地方,而是程序中后面的文本行。我们能知道为什么,如果我们跟随丢失引号文本行之后的程序。...When the command: 我们得到一个相当神秘的错误信息,其后是第二个 echo 命令的输出结果。这问题是由于 test 命令中 number 变量的展开结果造成的。...进一步说,因为 test 命令运行失败了(由于错误),这个 if 命令接收到一个非零退出代码,因此执行第二个 echo 命令。...在一个脚本中,错误往往是由意想不到的逻辑流导致的。也就是说,脚本中的一部分代码或者从未执行,或是以错误的顺序,或在错误的时间给执行了。...We can add messages to our code fragment: 一种追踪方法涉及到在脚本中添加可以显示程序执行位置的提示性信息。
bash完全兼容sh,也就是说,用sh写的脚本可以不加修改的在bash中执行 二、shell特点 简单性:Shell是一个高级语言;通过它,你可以简洁地表达复杂的操作。...开发容易:可以在短时间内完成一个功能强大又妤用的脚本。 三、常见错误 报错:-bash: ....&printf echo是Shell的一个内部指令,用于在屏幕上打印出指定的字符串 显示转义字符:echo "\"It is a test\"" 换行显示: echo "OK!...\n" echo "It is a test" 显示变量: name="OK" echo "$name It is a test" 显示结果重定向至文件: echo "It is a test" > myfile...输入重定向: 本来需要从键盘获取输入的命令会转移到文件读取内容:command < file 如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到/dev/null:$ command
echo "没有前缀" cat this_file_not_exist echo "错误之后的命令" 命令不会被执行 # bash中执行 make $..."没有前缀" @cat this_file_not_exist @echo "错误之后的命令" 命令不会被执行 # bash中执行 make $ make 没有前缀..."没有前缀" -cat this_file_not_exist -echo "错误之后的命令" 命令会被执行 # bash中执行 make $ make echo...出错之后的命令也会显示 错误之后的命令 命令也会执行 2.4 伪目标 伪目标并不是一个"目标(target)", 不像真正的目标那样会生成一个目标文件....) @echo $(CC) @echo $(CXX) # bash 中执行make, 显示各个变量的值 $ make rm -f ar cc g++ 2.11.2 命令参数变量 变量名
命令:export PATH=PATH:当前路径//注意分割路径使用的时':' 在Linux中的bash(命令行)是可以定义变量的。...三、设置环境变量 1.关于变量的命令 1.echo 显示某个环境变量值 为什么用echo可以显示myval的值,但是用env不能显示该变量的值?...本地变量是定义在进程中的局部变量,只在当前进程(bash)中有效。 为什么子进程要继承父进程的环境变量?...——PWD 该环境变量在bash中维护当前所处路径。...本文作者目前也是正在学习Linux相关的知识,如果文章中的内容有错误或者不严谨的部分,欢迎大家在评论区指出,也欢迎大家在评论区提问、交流。
$- 显示Shell使用的当前选项,与set命令功能相同。 $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 #!...1.显示普通字符串: echo "It is a test" 这里的双引号完全可以省略,以下命令与上面实例效果一致: echo It is a test 2.显示转义字符 echo "\"It is a...test\"" 结果将是: "It is a test" 同样,双引号也可以省略 3.显示变量 read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量 #!...后台运行的最后一个进程的ID号 $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。 $- 显示Shell使用的当前选项,与set命令功能相同。 $? 显示最后命令的退出状态。...标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
:~/test$ echo $user xlinsist vincent@geek:~/test$ 123456789 从上面的read命令中可以看作,我并没有被要求输入什么。...现在让我们来个更加复杂的例子吧,来帮你们整理一下思路,脚本如下: exec 3>&1 exec 1>test echo "这句话被存到test文件中" echo "还有这句" exec 1>&3 echo...接着两个echo命令的输出会自然去找文件描述符1,然后它看到文件描述符1指向的是test文件,所以它会把输出写到test文件中。...整个过程就是这样的,只要你理解了它们的原理,以后无论在脚本中怎样处理重定向的你都不会感觉到迷茫了。下面我将介绍一些与文件描述符相关的一些shell命令,这可以让你如虎添翼。...我们可以把标准错误输出重定向到/dev/null,从而丢掉不想保存的错误信息 我们可以快速移除现有文件的数据而不用先删除文件在创建。
[root@znix ~]# echo $a 惨绿少年 1.4.2 让执行命令后出现提示信息 -p 为显示提示信息。...test命令 2.2 test命令实例 test命令不会自己输出执行的结果,配合$?...-eq 不等于 not equal 3.5 [实例]如果cal2.sh脚本的参数个数不等于2,就显示 "命令错误" 3.5.1 书写脚本 !...= 表示判断两个是否不相等,如果不想等就显示命令错误 #/bin/bash if [ $# != 2 ];then echo "命令错误" fi 3.5.2 对脚本进行测试..../scripts/cal2.sh 1 2 [root@znix ~]# sh /server/scripts/cal2.sh 1 2 3 命令错误 3.6 修改之前的计算器,进行两个数字的加减乘除,在计算器前面加上参数个数判断
,命令错误,继续执行 脚本执行,语法错误,终止执行 bash -n 语法检查,但不检查命令错误 bash -x 查看执行过程,跟踪调试 pstree :查看进程树 pstree -p $$:可以查看当前进程.../bin/bash export name #name="son" echo "son pid is $$" echo "son.sh:name=$name" 结果:子进程的变量只在子进程中有效 从上面的例子中...set :显示出所有的变量包括一些函数 (7)删除变量 unset 变量名,... (8)显示上一条命令执行情况 echo $?...9、条件测试 判断某需求是否满足,需要有测试机制来实现 专用的测试表达式需要由测试命令辅助完成测试过程 评估布尔声明,以便用在条件执行中 若真,则返回0 若假,则返回1 测试命令 test EXPRESSION...b c echo $b yyy -->echo $c zzz read m n l 12、bash中如何展开命令行 把命令行分成单个命令词 展开别名 展开大括号中的声明{} 展开波浪符声明~ 命令替换$
set命令也用来显示系统中已存在的shell变量以及设置新的shell变量。 2. set命令的常用参数及作用 set 不带参数的set命令用来显示环境变量。...CUDA_PKG_VERSION=10-0=10.0.130-1 CUDA_VERSION=10.0.130 CUDNN_VERSION=7.6.0.64 ... set -e -e参数表示只要shell脚本中发生错误...set -e在shell脚本中经常使用。默认情况下,shell脚本碰到错误会报错,但会继续执行后面的命令。 test.sh脚本内容如下: #!.../usr/bin/env bash set -e hello echo "Hello set" 执行结果如下: root@3500f62fe5ae:/workspace# sh test.sh test.sh.../usr/bin/env bash echo $test set -u echo $hello 执行结果如下: root@3500f62fe5ae:/workspace# sh test.sh test.sh
领取专属 10元无门槛券
手把手带您无忧上云