【学习笔记】shell(一)

tech2026-08-09  2

1.执行方式

bash ./test.sh 不需要给此脚本赋予可执行权限就可以进行执行,需要有可执行权限,chomd u+x 文件名 ./test.sh 需要给此脚本赋予可执行权限 两者执行会产生一个新的进程,不会对父进程产生影响

source 和 .filename.sh 不会产生新的进程,直接在此进程进行执行。对当前shell脚本产生影响

2.管道

1. 管道符'|': 将第一个的输出结果作为第二个应用程序的输入 三个的话以此类推 如:cat test.txt | more 即分页展示text.txt的内容

3.重定向

输入重定向:是指不使用系统提供的标准输入端口,而进行重新的指定。换言之,输入重定向就是不使用标准输入端口输入文件,而是使用指定的文件作为标准输入设备。(重定向简单理解就是使用 “<”符来修改标准输入设备)

输出重定向:(通俗的讲,重定向输出就是把要输出的文件信息写入到一个文件中去,而不是将要输出的文件信息输出到控制台(显示屏))

">"将123输入到文件file中,将原来file的中内容先清空,在输入123 “>>”将123输入到文件file中,但是不清空原数据,在后追加123 “2>”如果echo 123 命令产生错误,则将错误的内容输出放在file中 “&>”错误和正确内容都输出到file中 将a.txt中的东西放到var2中,然后用echo 查看此变量 将变量var2输出到文件b 如nocmd不是一个命令,可以使用2>将错误信息输出则使用 nocmd 2> 1.text

4.变量

a=123 之间不要用空格,否则会认为是命令 注意:尽量不要使用shell进行计算,因为其性能会很慢

1.还可以将命令的结果赋值给变量 (如一个命令过于复杂,且多次使用,可以将结果放到一个变量中去) 如:lect=$(ls -l) 还可以写成 两个单引号如图 2. 因为变量中不能有空格,则遇到的字符串需要空格则需要用双引号括住,比如a=“hello bash” 如果本身有双引号了 需要再次括住 则用单引号,反之亦然。

5.变量作用域

两个shell脚本 下面展示一些 代码a.sh。

name=huazi ehco ${name} ./b.sh

下面展示一些 代码b.sh。

ehco "name in b.sh"${name}

直接输出则结果是

huazi name in b.sh

b是a的子进程,子进程不能访问到父进程进程的数据,可以在 a.sh中变量name前加上export,则子进程可以访问到

下面展示一些 a.sh。

export name=huazi ehco ${name} ./b.sh

再次执行a.sh

huazi name in b.sh:huazi

脚本a中export的变量在启动其他脚本的时候会复制一份传入其他脚本,传入的值是调用其他脚本的时的值。并不是export时的值。 在脚本A中定义了一个变量V赋值为1,export了变量V,然后修改V为2,在脚本A中启动脚本B,在脚本B中变量V的值就是2。

父进程想访问子进程的东西 下面展示一些 a.sh。

name=huazi echo ${name} source ./b.sh echo 'a in' ${name} echo 'b in name1'${name1}

下面展示一些 b.sh。

echo "name in b.sh:"$name name1=miaozi echo "b in"$name1

结果

huazi name in b.sh:huazi b inmiaozi a in huazi b in name1miaozi

使用source 使用source 执行代码即是在本进程执行,而./a.sh是另开辟一个子进程执行。共享一个进程则可以共享一个变量

最新回复(0)