bash ./test.sh 不需要给此脚本赋予可执行权限就可以进行执行,需要有可执行权限,chomd u+x 文件名 ./test.sh 需要给此脚本赋予可执行权限 两者执行会产生一个新的进程,不会对父进程产生影响
source 和 .filename.sh 不会产生新的进程,直接在此进程进行执行。对当前shell脚本产生影响
输入重定向:是指不使用系统提供的标准输入端口,而进行重新的指定。换言之,输入重定向就是不使用标准输入端口输入文件,而是使用指定的文件作为标准输入设备。(重定向简单理解就是使用 “<”符来修改标准输入设备)
输出重定向:(通俗的讲,重定向输出就是把要输出的文件信息写入到一个文件中去,而不是将要输出的文件信息输出到控制台(显示屏))
">"将123输入到文件file中,将原来file的中内容先清空,在输入123 “>>”将123输入到文件file中,但是不清空原数据,在后追加123 “2>”如果echo 123 命令产生错误,则将错误的内容输出放在file中 “&>”错误和正确内容都输出到file中 将a.txt中的东西放到var2中,然后用echo 查看此变量 将变量var2输出到文件b 如nocmd不是一个命令,可以使用2>将错误信息输出则使用 nocmd 2> 1.text
a=123 之间不要用空格,否则会认为是命令 注意:尽量不要使用shell进行计算,因为其性能会很慢
1.还可以将命令的结果赋值给变量 (如一个命令过于复杂,且多次使用,可以将结果放到一个变量中去) 如:lect=$(ls -l) 还可以写成 两个单引号如图 2. 因为变量中不能有空格,则遇到的字符串需要空格则需要用双引号括住,比如a=“hello bash” 如果本身有双引号了 需要再次括住 则用单引号,反之亦然。
两个shell脚本 下面展示一些 代码a.sh。
name=huazi ehco ${name} ./b.sh下面展示一些 代码b.sh。
ehco "name in b.sh"${name}直接输出则结果是
huazi name in b.shb是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是另开辟一个子进程执行。共享一个进程则可以共享一个变量
