source、sh、bash、.执行脚本的区别
shell里面bash的用法
在shell中使用bash,可以执行命令,编写脚本和运行脚本。
以下是一些常见的bash用法示例:执行命令:在shell中直接输入命令并按下回车键即可执行。
例如:ls命令用于列出当前目录中的文件和子目录。
运行脚本:创建一个以.sh为后缀的脚本文件,编辑文件并添加所需的命令。
然后在shell中使用bash命令或直接运行脚本文件来执行。
例如,创建一个名为script.sh的脚本文件,其中包含以下内容:bash#!/bin/bashecho "Hello, World!"在shell中运行脚本:bash script.sh 或者给脚本添加执行权限后直接运行:chmod +x script.sh,然后./script.sh。
传递参数:可以在命令行中传递参数给脚本。
脚本可以通过特殊变量$1,$2,$3等来获取这些参数的值。
例如,创建一个脚本文件greeting.sh,其中包含以下内容:bash#!/bin/bashecho "Hello, $1!"在shell中运行脚本并传递参数:bash greeting.sh Alice,将输出Hello, Alice!控制流:bash提供了条件语句和循环语句,可以根据条件来执行不同的命令或重复执行一段代码。
例如,使用if语句检查一个条件是否为真:bash#!/bin/bashif [ $1 -gt 10 ]; thenecho "The number is greater than 10."elseecho "The number is not greater than 10."fi在shell中运行脚本并传递参数:bash check_number.sh 15,将输出The number is greater than 10.这只是一些bash用法的简单示例,bash还提供了许多其他功能和命令,可根据具体需求进行进一步学习和使用。
sh命令的用法
sh命令是Shell命令的简称,用于在Unix和类Unix操作系统上执行命令。
它是一种解释性语言,通过读取命令并将其传递给操作系统来执行。
以下是一些常见的sh命令用法:
运行脚本文件:通过sh命令可以运行Shell脚本文件。
语法如下:
php
sh <脚本文件名>
例如,要运行名为"script.sh"的脚本文件,可以使用以下命令:
bash
sh script.sh
执行命令:sh命令可以用来执行任何在Shell中可用的命令。
语法如下:
php
sh -c <命令>
例如,要在当前Shell中打印"Hello World!",可以使用以下命令:
bash
sh -c "echo Hello World!"
交互模式:通过使用-i选项,可以让sh命令进入交互模式。
这将打开一个Shell提示符,允许用户交互式地输入命令。
语法如下:
bash
sh -i
脚本中调用命令:在Shell脚本中,可以使用sh命令来调用其他Shell命令或脚本。
语法如下:
php
sh <命令或脚本> <参数>
例如,要在脚本中调用另一个脚本,可以使用以下语法:
bash
sh another_script.sh arg1 arg2
这些是sh命令的一些常见用法。
Linux之BASH和SHELL学习总结
Bourne Again SHell (简称 bash)功能:1、命令编修能力 .bash_history文件2、命令与档案补全能力 Tab键[Tab] 接在一串指令的第一个字的后面,则为命令补全;[Tab] 接在一串指令的第二个字以后时,则为『档案补齐』!3、命令别名设定,指令: alias ---alias lm='ls -al',在.bash_profile文件里4、工作控制、前景背景控制: (job control, foreground, background)-----------------------???????????不懂5、程序化脚本: (shell scripts)6、通配符(Wildcard)bash内建命令 type type [-tpa] name,产看命令是否是bash内建命令,还是外部命令。
命令多行输入反斜杠'\' 然后紧接回车。
变量取用 echo $variable变量设定规则1、等号连接,等号两边没有空格;2、变量名只能是字母和数字,变量名开头不能为数字;3、发量内容若有空格符可使用双引号『"』或单引号『'』将发量内容结合起来,但双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:『var="lang is $LANG"』则『echo $var』可得『lang is en_US』单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』;4.可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符;5、在一串指令中,还需要藉由其他的指令提供的信息,可以使用反单引号『`指令`』或『$(指令)』。
特别注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号!例如想要取得核心版本的设定:『version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』;6、若该变量为扩增变量内容时,则可用 "$变量名称" 或 ${变量} 累加内容,如下所示:『PATH="$PATH":/home/bin』7、若该变量需要在其他子程序执行,则需要以 export 来使变量变成环境变量:『export PATH』8、通常大写字符为系统默认变量,自行讴定变量可以使用小写字符,方便判断 (纯粹依照使用者兴趣与嗜好) ;9、取消变量的方法为使用 unset :『unset 变量名称』例如取消 myname 的设定:『unset myname』获取版本信息 uname -r查看环境变量 env查看当前shell环境下所有环境变量,set 查看所有变量(包括环境变量和自定义变量),两者区别为该变量是否可以被子程序所继续引用。
source命令与“.”点命令
source命令与“.”点命令source 命令是bash shell 的内置命令,从C Shell 而来。
source 命令的另一种写法是点符号,用法和source 相同,从Bourne Shell而来。
source 命令可以强行让一个脚本去立即影响当前的环境。
source 命令会强制执行脚本中的全部命令,而忽略文件的权限。
source 命令通常用于重新执行刚修改的初始化文件,如.bash_profile 和.profile 等等。
source 命令可以影响执行脚本的父shell的环境,而export 则只能影响其子shell的环境。
使用方法举例:$source ~/.bashrc或者:$. ~/.bashrc执行后~/.bashrc 中的内容立即生效。
一个典型的用处是,在使用Android 的mm 等相关命令时,需要先执行以下命令:$cd <android source path>$source ./build/envsetup.sh 或者$. ./build/envsetup.shsource命令(从C Shell 而来)是bash shell的内置命令。
点命令,就是个点符号,(从Bourne Shell而来)是source的另一名称。
同样的,当前脚本中设置的变量也将作为脚本的环境,source(或点)命令通常用于重新执行刚修改的初始化文件,如.bash_profile 和.profile 等等。
例如,如果在登录后对.bash_profile 中的EDITER 和TERM 变量做了修改,则能用source 命令重新执行.bash_profile 中的命令而不用注销并重新登录。
source命令的作用就是用来执行一个脚本,那么:source a.sh 同直接执行./a.sh 有什么不同呢,比如你在一个脚本里export $KKK=111 ,如果你用./a.sh执行该脚本,执行完毕后,你运行echo $KKK ,发现没有值,如果你用source 来执行,然后再echo ,就会发现KKK=111。
linux的source用法
linux的source用法Linux的source命令是一个用于执行Shell脚本的命令。
通过source命令,我们可以在当前Shell环境下执行一个脚本文件,而不是创建一个新的子进程来执行脚本。
本文将介绍Linux的source命令的用法和实例,并探讨它的一些重要特性。
一、source命令的基本用法source命令的基本用法非常简单,只需在命令行中输入source命令,后面跟上要执行的脚本文件的路径即可。
例如:```source /path/to/script.sh```在执行source命令后,脚本文件中的命令将会在当前Shell环境下被执行,也就是说,脚本中定义的变量、函数等将会在当前Shell中生效。
二、source命令与"."命令的区别在Linux中,"."(点号)也可以用来执行脚本文件,与source命令类似。
例如:```. /path/to/script.sh```与source命令不同的是,"."命令在执行脚本时会创建一个子Shell进程来执行脚本文件,而source命令则直接在当前Shell环境下执行脚本,因此source命令执行的脚本中定义的变量和函数就可以在当前Shell中被使用。
三、source命令的特性1. 永久修改环境变量使用source命令执行修改环境变量的脚本文件时,修改结果将会在当前Shell环境中生效,并且能够一直保持下去,而不仅仅是在脚本执行结束后临时生效。
2. 脚本文件无需执行权限使用source命令执行脚本文件时,脚本文件不需要具有可执行权限,只需要对脚本文件具有读权限即可。
3. 加载外部脚本库在编写Shell脚本时,我们可以将一些通用的函数或配置放在外部脚本库中,然后通过source命令将这些脚本库加载到当前Shell环境中,以供脚本文件使用。
四、source命令的实例下面通过几个实例来演示source命令的用法。
shell脚本执行几种方法和区别
shell脚本执行几种方法和区别Shell脚本是一种用于自动化执行一系列命令的脚本语言,常用于系统管理、任务调度、数据处理等场景。
在Linux/Unix系统中,有多种方式可以执行Shell脚本,下面将介绍几种常见的执行方法和它们的区别。
1.直接运行脚本文件:将脚本文件赋予执行权限(chmod +x script.sh),然后在终端中直接执行脚本文件(./script.sh)。
这种方式是最简单的执行方法,可以将脚本文件作为可执行文件执行,但只能在当前目录下执行脚本。
2. 在当前Shell中执行脚本:使用"source"命令或"."命令可以在当前Shell环境中加载并执行脚本,而不是新开一个子Shell。
这种方式执行的脚本可以直接使用当前Shell环境中的变量和函数,对当前Shell环境产生影响。
语法如下:source script.sh或者. script.sh3. 使用bash解释器执行脚本:Shell脚本默认使用的是系统中的默认Shell解释器,一般是/bin/sh。
但是,有些脚本可能使用了bash特定的语法或功能,此时可以使用bash解释器来执行脚本。
语法如下:bash script.sh或者./script.sh(脚本文件首行指定#!/bin/bash)4. 使用sh解释器执行脚本:如果脚本文件不依赖于bash特有的功能,那么可以使用更通用的sh解释器执行脚本。
sh解释器更轻量级,执行效率更高。
语法如下:sh script.sh或者./script.sh(脚本文件首行指定#!/bin/sh)5. 使用其他Unix/Linux解释器执行脚本:除了常见的bash和sh解释器外,还可以使用其他的Shell解释器执行脚本,如ksh、csh、tcsh等。
这些解释器的语法和功能可能有些差异,根据实际需求选择合适的解释器进行执行。
以上是几种常见的Shell脚本执行方法1. 执行路径:直接运行脚本文件需要指定文件的路径,执行脚本的路径可以是任意的。
bash基本语法
bash基本语法bash是一种常见的命令行解释器,被广泛应用于Unix和Linux系统中。
它提供了一系列基本的语法和命令,用于执行各种任务。
本文将介绍bash的基本语法和用法,以帮助读者更好地理解和使用bash。
一、基本命令和语法1. 执行命令:在bash中,可以直接输入命令来执行相应的操作。
例如,输入"ls"可以列出当前目录下的文件和文件夹。
2. 变量定义和赋值:使用"="来给变量赋值。
例如,"name=John"将变量name赋值为John。
3. 变量引用:在bash中,可以通过"$"符号引用变量的值。
例如,"$name"将输出变量name的值。
4. 注释:使用"#"符号来添加注释,用于解释代码的功能或目的。
5. 输入输出重定向:可以使用">"和"<"符号将命令的输入和输出重定向到文件。
例如,"ls > file.txt"将ls命令的输出保存到file.txt文件中。
6. 管道:使用"|"符号将一个命令的输出作为另一个命令的输入。
例如,"ls | grep .txt"将列出当前目录下所有以.txt结尾的文件。
7. 条件语句:使用if语句来执行条件判断。
例如,"if [ $num -gt 10 ]; then echo '大于10'; fi"将判断变量num是否大于10,并输出相应的结果。
8. 循环语句:使用for和while语句来执行循环操作。
例如,"for i in {1..5}; do echo $i; done"将输出1到5的数字。
9. 函数定义和调用:使用"function"关键字来定义函数,并使用函数名调用函数。
bash是什么
bash是什么bash是 Bourne Again Shell 的缩写,是linux默认的标准shell(也是大家常说的系统内核),bash也是Unix/Linux 上常见的Shell脚本解释器,既然bash是标准的shell,那么就有非标准的sh,csh,ksh等等,我们常说有多少种Shell,其实说的是Shell脚本解释器,Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,bash是基于Bourne shell创建的,并且吸收了C shell和Korn shell的一些特性,而且bash完全兼容sh,也就是说,用sh写的脚本可以不加修改的在bash中执行。
sh:sh 由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。
ash:ash shell 是由Kenneth Almquist编写的,Linux 中占用系统资源最少的一个小shell,它只包含24个内部命令,因而使用起来很不方便。
csh:csh 是Linux比较大的内核,它由以William Joy 为代表的共计47位编成,共有52个内部命令。
该shell其实是指向/bin/tcsh这样的一个shell,也就是说,csh其实就是tcsh。
ksh:ksh 是Korn shell的缩写,由Eric Gisin编写,共有42条内部命令。
该shell最大的优点是几乎和商业发行版的ksh完全兼容,这样就可以在不用花钱购买商业版本的情况下尝试商业版本的性能了。
现在我们知道Unix/Linux上有多种shell,那我怎么知道当前使用的哪种shell呢,我们可以从当前进程中查看到这些信息。
方法1: ps | grep $$ | awk '{print $4}' 方法2: echo $0 方法3: echo $$ | ps -p$$表示shell的进程号同样的,在/etc/shells配置文件中记录了用户可以登录的shell的具体路径,有就是说用户可以在当前系统中使用的所有可登录shell的类型,因此查看这个文件的内容,即可知道当前系统中所支持的所有shell类型。
source用法
source用法source命令是一个内置的shell命令,它的主要作用是从当前shell会话中的文件读取和执行命令。
这个命令通常被用来保留或更改当前shell中的环境变量。
source命令的语法是:source FileName [ARGUMENTS]。
如果提供了参数,那么这些参数将用作传递脚本的位置参数。
另一种等价的写法是使用"."作为命令,即. FileName [ARGUMENTS]。
这两种写法在功能上是相同的。
与sh或bash命令不同,当使用source命令时,该文件中的命令将在当前shell环境中执行,而不是启动一个新的子shell 来执行它们。
这意味着在文件中定义的变量、函数和别名都将在当前shell中可用,并且对它们所做的任何更改都将影响当前shell及其子进程。
使用source命令的一个常见用途是在启动脚本中设置环境变量。
例如,假设有一个名为env.sh的脚本,其中包含一些用于配置应用程序的环境变量。
要在启动应用程序之前加载这些变量,这将从env.sh文件中读取并执行所有命令,并将这些变量添加到当前shell环境中。
现在,可以在当前shell会话中使用这些变量了。
另一个常见的用途是在交互式shell中使用自定义别名和函数。
例如,可以创建一个名为my_aliases.sh的文件,其中包含一些自定义别名和函数。
要将这些别名和函数加载到当前的shell会话中,这将从my_aliases.sh文件中读取并执行所有命令,并将这些别名和函数添加到当前shell环境中。
现在,可以在当前shell会话中使用这些别名和函数了。
source命令是一个非常有用的工具,可用于在当前shell会话中加载和执行文件中的命令。
它可以用于设置环境变量、定义别名和函数等操作,从而使开发人员能够更轻松地管理和配置他们的工作环境。
source命令与“_1_[1].”点命令
我昨天明明将说有的编译都成功执行了,可是在板子上执行ipanel可执行文件时,老是出现了一样一个错误。
“Illegal seek Unable to find stsys device ! 和The dev path enviroment variable is not defined: STBUFFER_IOCTL_DEV_PATH”;百思不得其解,陈勇说环境变量错了,我就重新检查了编译内核的脚步setenv.sh中的环境变量又重新编译再执行,仍然不行!后来长青过来,进行了如下操作:(由于我将根文件系统中的root目录下的.bash_profile文件全都注释掉了,就是不让这个文件中的脚步执行了。
等板子起来之后,手动执行),所以长青等板子起来就这样做的。
1、进入modules目录执行source load_modules.sh 2、退出的上层root目录执行.ipanel.elf。
问题就没了。
而我是用的是./load_modules.sh 再执行./ipanel.elf 问题就出现了。
我当时很奇怪,上网搜了一下才知道是source命令和.命令之间的区别搞的鬼。
所以就上网搜了一遍关于这方面的文档。
source命令与“.”点命令source 命令是bash shell 的内置命令,从C Shell 而来。
source 命令的另一种写法是点符号,用法和source 相同,从Bourne Shell而来。
source 命令可以强行让一个脚本去立即影响当前的环境。
source 命令会强制执行脚本中的全部命令,而忽略文件的权限。
source 命令通常用于重新执行刚修改的初始化文件,如.bash_profile 和.profile 等等。
source 命令可以影响执行脚本的父shell的环境,而export 则只能影响其子shell的环境。
使用方法举例:$source ~/.bashrc或者:$. ~/.bashrc执行后~/.bashrc 中的内容立即生效。
shell中sh和bash的区别
shell中sh和bash的区别在shell脚本的开头往往有⼀句话来定义使⽤哪种sh解释器来解释脚本。
⽬前研发送测的shell脚本中主要有以下两种⽅式:(1) #!/bin/sh(2) #!/bin/bash脚本test.sh内容:#!/bin/shsource pcy.sh #pcy.sh并不存在echo hello执⾏./test.sh,屏幕输出为:./test.sh: line 2: pcy.sh: No such file or directory由此可见,在#!/bin/sh的情况下,source不成功,不会运⾏source后⾯的代码。
修改test.sh脚本的第⼀⾏,变为#!/bin/bash,再次执⾏./test.sh,屏幕输出为:./test.sh: line 2: pcy.sh: No such file or directoryhello由此可见,在#!/bin/bash的情况下,虽然source不成功,但是还是运⾏了source后⾯的echo语句。
但是紧接着我⼜试着运⾏了⼀下sh ./test.sh,这次屏幕输出为:./test.sh: line 2: pcy.sh: No such file or directory表⽰虽然脚本中指定了#!/bin/bash,但是如果使⽤sh ⽅式运⾏,如果source不成功,也不会运⾏source后⾯的代码。
为什么会有这样的区别呢?1. sh⼀般设成bash的软链[work@zjm-testing-app46 cy]$ ll /bin/shlrwxrwxrwx 1 root root 4 Nov 13 2006 /bin/sh -> bash2. 在⼀般的linux系统当中(如redhat),使⽤sh调⽤执⾏脚本相当于打开了bash的POSIX标准模式3. 也就是说 /bin/sh 相当于 /bin/bash --posix所以,sh跟bash的区别,实际上就是bash有没有开启posix模式的区别so,可以预想的是,如果第⼀⾏写成 #!/bin/bash --posix,那么脚本执⾏效果跟#!/bin/sh是⼀样的(遵循posix的特定规范,有可能就包括这样的规范:“当某⾏代码出错时,不继续往下解释”。
Shell脚本调用另一个脚本的三种方法
Shell脚本调⽤另⼀个脚本的三种⽅法假如有脚本 first.sh:#!/bin/bash#------------------#@file:first.sh#------------------echo 'your are in first file'如何在其它Shell脚本中调⽤first.sh呢?主要有三种⽅法:source、点号以及sh命令。
1.source#!/bin/bash#---------------#@file:second.sh#---------------echo 'your are in second file'source first.sh2.点号.#!/bin/bashecho 'your are in second file'. first.sh注意,点号与脚本⽂件之间记得要有空格。
3.sh命令#!/bin/bashecho 'your are in second file'sh first.sh三者输出的结果都是:your are in second fileyour are in first file4.三者的区别使⽤source命令和点号.是等价了,类似于C/C++中的#include预处理指令,都是将指定的脚本内容拷贝⾄当前的脚本中,由⼀个Shell进程来执⾏。
使⽤sh命令来调⽤另外的脚本和前⾯两种⽅法有着本质的区别。
使⽤sh命令则会开启新的Shell进程来执⾏指定的脚本,这样的话,⽗进程中的变量在⼦进程中就⽆法访问。
参考如下代码:first.sh内容如下,访问了second.sh中的变量second。
#!/bin/bashecho 'your are in first file'echo 'second:' $secondsecond.sh内容,通过上⾯介绍的三种⽅法来调⽤first.sh,看看对second.sh的变量second访问有什么区别!#!/bin/bashsecond=lvlvecho 'your are in second file'source first. firstsh first程序的输出结果是:your are in second fileyour are in first filesecond: lvlvyour are in first filesecond: lvlvyour are in first filesecond:可见,使⽤sh命令开启⼀个⼦进程来调⽤指定的shell脚本⽆法访问⽗进程的变量。
bash和sh的区别
--End Mason
但是,实则不然。以下部分摘自bash的man page。
If bash is invoked with the name sh, it tries to mimic the startup behavior of historical versions of sh as closely as possible, while conforming to the POSIX standard as well. When invoked as an interactive login shell, or a non-interactive shell with the --login option, it first attempts to read and execute commands from /etc/pro†file and ~/.profile, in that order. The --noprofile option may be used to inhibit this behavior. When invoked as an interactive shell with the name sh, bash looks for the variable ENV, expands its value if it is defined, and uses the expanded value as the name of a file to read and execute. Since a shell invoked as sh does not attempt to read and execute commands from any other startup files, the --rcfile option has no effect. A non-interactive shell invoked with the name sh does not attempt to read any other startup files. When invoked as sh, bash enters posix mode after the startup files are read.
bash csh语法
bash csh语法bash和csh是Unix和Linux操作系统中常用的两种Shell语言。
这两种语言有许多相似之处,但也有一些区别。
在本文中,我们将深入探讨这两种语言的语法。
1. 变量在bash和csh中,变量都以$符号开头。
不同之处在于,bash 使用等号=来分配变量,而csh使用set命令。
例如,在bash中,可以这样分配变量:my_variable='Hello World'而在csh中,需要使用set命令:set my_variable='Hello World'2. 命令执行在bash中,可以使用反引号或$()来执行命令。
例如,在bash 中,可以这样执行命令:result=`ls`result=$(ls)而在csh中,需要使用反引号:set result=`ls`3. 数组在bash中,可以使用小括号来定义数组。
例如:my_array=(1 2 3 4 5)而在csh中,可以使用大括号来定义数组。
例如:set my_array = (1 2 3 4 5)4. 条件语句在bash和csh中,条件语句的语法非常相似。
例如,在bash中,可以这样写条件语句:if [ $num -eq 10 ]thenecho 'num is 10'elseecho 'num is not 10'fi而在csh中,可以这样写条件语句:if ( $num == 10 ) thenecho 'num is 10'elseecho 'num is not 10'endif5. 循环语句在bash和csh中,循环语句的语法也非常相似。
例如,在bash 中,可以这样写循环语句:for i in {1..5}doecho $idone而在csh中,可以这样写循环语句:foreach i ( 1 2 3 4 5 )echo $iend总结虽然bash和csh的语法有些不同,但它们都是Unix和Linux系统中非常重要的Shell语言。
sh命令用法 -回复
sh命令用法-回复sh命令用法详解sh命令是Linux系统中最常用的命令之一,它是Shell(壳)的一种类型,用于执行命令、脚本文件以及控制进程。
在本篇文章中,我们将详细了解sh命令的使用方法,帮助读者更好地理解和运用sh命令。
一、什么是sh命令?sh命令是指shell命令的缩写,它是用于交互式地运行命令或运行脚本文件的一种命令行解释器。
在Linux系统中,常见的shell命令有sh、bash、csh、ksh等,每种shell都有自己的特点和使用方法。
二、sh命令的基本用法1. 运行命令:sh命令可以直接用于运行命令,只需在终端中输入命令即可。
例如,输入“sh ls”,即可执行ls命令,展示当前目录下的所有文件和文件夹。
2. 运行脚本文件:sh命令常用于运行脚本文件,例如Shell脚本文件(后缀为.sh)。
要运行脚本文件,只需输入“sh 脚本文件路径”。
例如,输入“sh /home/user/test.sh”,即可运行位于/home/user目录下的test.sh 脚本文件。
3. 执行命令组合:sh命令可以执行多个命令组合,只需将命令用分号隔开即可。
例如,输入“sh ls; echo Hello”,即可先执行ls命令,再执行echo命令。
4. 执行后台任务:sh命令可以执行后台任务,在命令结尾加上“&”即可。
例如,输入“sh command &”,即可将command命令放到后台执行。
5. 重定向和管道:sh命令可以使用重定向和管道操作符来处理命令的输入和输出。
例如,输入“sh ls > file.txt”,即可将ls命令的输出重定向到file.txt文件中。
又如,输入“sh cat file.txt grep keyword”,即可将file.txt文件的内容通过管道传递给grep命令进行筛选。
6. 命令参数:sh命令可以接受命令参数,参数通常用空格分隔。
例如,输入“sh ls -l”,即可执行带有参数“-l”的ls命令,以列表形式展示当前目录的详细信息。
linux里source、sh、bash、.有什么区别
linux⾥source、sh、bash、.有什么区别在linux⾥,source、sh、bash、./都可以执⾏shell script⽂件,那它们有什么不同吗?-----------1、sourcesource a.sh在当前shell内去读取、执⾏a.sh,⽽a.sh不需要有"执⾏权限"source命令可以简写为".". a.sh注意:中间是有空格的。
2、sh/bashsh a.shbash a.sh都是打开⼀个subshell去读取、执⾏a.sh,⽽a.sh不需要有"执⾏权限"通常在subshell⾥运⾏的脚本⾥设置变量,不会影响到⽗shell的。
3、././a.sh#bash: ./a.sh: 权限不够chmod +x a.sh./a.sh打开⼀个subshell去读取、执⾏a.sh,但a.sh需要有"执⾏权限"可以⽤chmod +x添加执⾏权限另外,使⽤./来执⾏的⽂件⾥有alias语句的话,shell并不会把alias别名扩展成对应的命令,要解决的话,得使⽤shopt命令来开启alias扩展选项shopt -s expand_aliases4、fork、source、exec使⽤fork⽅式运⾏script时,就是让shell(parent process)产⽣⼀个child process去执⾏该script,当child process结束后,会返回parent process,但parent process的环境是不会因child process的改变⽽改变的。
使⽤source⽅式运⾏script时,就是让script在当前process内执⾏,⽽不是产⽣⼀个child process来执⾏。
由于所有执⾏结果均于当前process内完成,若script的环境有所改变,当然也会改变当前process环境了。
详解shell中source、sh、bash、.执行脚本的区别
详解shell中source、sh、bash、.执⾏脚本的区别1、source命令⽤法: source FileName 作⽤:在当前bash环境下读取并执⾏FileName中的命令。
该filename⽂件可以⽆"执⾏权限"注:该命令通常⽤命令“.”来替代。
如:source .bash_profile. .bash_profile两者等效。
source(或点)命令通常⽤于重新执⾏刚修改的初始化⽂档。
source命令(从 C Shell ⽽来)是bash shell的内置命令。
点命令,就是个点符号,(从Bourne Shell⽽来)。
2、sh和bash命令⽤法:sh FileNamebash FileName作⽤:在当前bash环境下读取并执⾏FileName中的命令。
该filename⽂件可以⽆"执⾏权限"注:两者在执⾏⽂件时的不同,是分别⽤⾃⼰的shell来跑⽂件。
sh使⽤“-n”选项进⾏shell脚本的语法检查,使⽤“-x”选项实现shell脚本逐条语句的跟踪,可以巧妙地利⽤shell的内置变量增强“-x”选项的输出信息等。
3、./的命令⽤法:./FileName作⽤:打开⼀个⼦shell来读取并执⾏FileName中命令。
注:运⾏⼀个shell脚本时会启动另⼀个命令解释器.每个shell脚本有效地运⾏在⽗shell(parent shell)的⼀个⼦进程⾥.这个⽗shell是指在⼀个控制终端或在⼀个xterm窗⼝中给你命令指⽰符的进程.shell脚本也可以启动他⾃已的⼦进程.这些⼦shell(即⼦进程)使脚本并⾏地,有效率地地同时运⾏脚本内的多个⼦任务.shell的嵌⼊命令:: 空,永远返回为true. 从当前shell中执⾏操作break 退出for、while、until或case语句cd 改变到当前⽬录continue 执⾏循环的下⼀步echo 反馈信息到标准输出eval 读取参数,执⾏结果命令exec 执⾏命令,但不在当前shellexit 退出当前shellexport 导出变量,使当前shell可利⽤它pwd 显⽰当前⽬录read 从标准输⼊读取⼀⾏⽂本readonly 使变量只读return 退出函数并带有返回值set 控制各种参数到标准输出的显⽰shift 命令⾏参数向左偏移⼀个test 评估条件表达式times 显⽰shell运⾏过程的⽤户和系统时间trap 当捕获信号时运⾏指定命令ulimit 显⽰或设置shell资源umask 显⽰或设置缺省⽂件创建模式unset 从shell内存中删除变量或函数wait 等待直到⼦进程运⾏完毕下⾯再看下 shell 脚本各种执⾏⽅式(source ./*.sh, . ./*.sh, ./*.sh)的区别结论⼀: ./*.sh的执⾏⽅式等价于sh ./*.sh或者bash ./*.sh,此三种执⾏脚本的⽅式都是重新启动⼀个⼦shell,在⼦shell中执⾏此脚本。
sh脚本中.和sh执行的区别以及shell的执行方式
sh脚本中.和sh执⾏的区别以及shell的执⾏⽅式1 ./需要执⾏权限,使⽤脚本⽂件中第⼀⾏#!指定的shell(解释器)来执⾏命令(譬如常见的/bin/bash),不指定系统会调⽤默认shell程序2 sh不需要执⾏权限,是使⽤sh这个shell执⾏命令,是个软链接,它可能是⼀个任意的shell,通常默认是bash shel,⽤type命令可以查看3 shell的执⾏⽅式先来看⼀个简单的shell脚本:1 2 3#!/bin/shcd/tmp echo"hello,world!" 我们来挨个解释⼀下脚本的每⼀⾏: 第⼀⾏:#!后⾯跟的是解释器的路径(shell本⾝就是⼀种解释型语⾔),解释器的路径是/bin/sh; 第⼆⾏:cd命令是切换当前⼯作⽬录的命令,tep是linux下根⽬录的⼀个⼦⽬录; 第三⾏:echo命令是输出后⾯所跟的参数 三种执⾏⽅法: 第⼀种:因为shell程序写完之后并没有执⾏权限,所以该脚本想要执⾏可以使⽤chmod命令赋予该脚本可执⾏的权限,然后再执⾏。
[root@localhost shell]# chmod +x echo.sh[root@localhost shell]# ./echo.shhello,world![root@localhost shell]# pwd/root/shell[root@localhost shell]# 第⼆种:调⽤解释器使得脚本执⾏,例如:bash、csh、csh、ash、bsh、ksh等等;[root@localhost shell]# sh echo.shhello,world![root@localhost shell]# bash echo.shhello,world![root@localhost shell]# pwd/root/shell第三种:使⽤source命令;root@localhost shell]# source echo.shhello,world![root@localhost tmp]# pwd/tmp 细⼼的读者可能发现了⼀个问题:在脚本的第⼀⾏有cd命令,这是⼀个改变⼯作⽬录的命令,可是使⽤第⼀种和第⼆种放⼤执⾏脚本后当前的⼯作⽬录并没有改变(脚本所在的⽬录是shell⽂件夹,脚本执⾏后,使⽤pwd命令显⽰出当前的⼯作⽬录还是shell),使⽤第三种⽅法执⾏后当前的⼯作⽬录就改变了,进⼊了tmp中。
Shell脚本的三种执行方式
Shell脚本的三种执⾏⽅式Shell脚本的执⾏⽅式可以有以下⼏种:⽅式⼀:./script.sh # 利⽤⼩数点来执⾏⽅式⼆:sh script.sh 或 bash script.sh # 利⽤bash(sh)来执⾏脚本前⾯两种⽅式其实都是⼀样的:都是在当前⽗进程下的⼦进程中执⾏,⼦进程完成后,⼦进程中的各项变量或操作将会结束⽽不会传回到⽗进程中.举例来说:可以看到,执⾏后再看脚本中两个变量,在⽗进程中不起作⽤!备注: 如果在script2.sh⽂件⾥⾯执⾏script1.sh的脚本,那么就是执⾏. ./script1.sh [中间有空格]⽅式三:source script.sh 或 . liqiang.sh# 利⽤⼩数点来执⾏⽽通过第三种⽅式执⾏(source test.sh)的话,在⽗进程中就起作⽤了:这就是直接执⾏与⽤source命令执⾏的区别,前者只作⽤于⼦进程本⾝,后者则作⽤于整个⽗进程。
因此:如要想不注销系统,并让全局配置⽂件⽣效,则必须⽤source命令:⽐如说: 在全局配置⽂件中/etc/profile添加了JAVA_HOME,要让他对整个环境⽣效export JAVA_HOME=/usr/java/jdk1.7.0_75就必须执⾏source /etc/profile注意:在执⾏时要赋权限chmod a+x liqiang.sh #赋权限chmod a+x script-name补充知识点:⼀个规范的Shell脚本在第⼀⾏会指出由哪个程序(解释器)来执⾏脚本中的内容,这⼀⾏内容在Linux bash的编程⼀般为:#!/bin/bash或#!/bin/sh注意:(1)在Shell中如果⼀⾏的第⼀个字母是#,则是注释,但是上⾯两个是写在第⼀⾏,所以不是脚本注释⾏,如果写在某个命令之后,则变成注释⾏。
(2)sh为bash的软链接,⼤多数情况下,脚本的开头使⽤“#!/bin/bash”和“#!/bin/sh”是没有区别的,但更规范的写法是在脚本的开头使⽤“#!/bin/bash”。
linuxexec用法总结
linuxexec⽤法总结总结表:exec命令作⽤exec ls在shell中执⾏ls,ls结束后不返回原来的shell中了exec <file将file中的内容作为exec的标准输⼊exec >file将file中的内容作为标准写出exec 3<file将file读⼊到fd3中sort <&3fd3中读⼊的内容被分类exec 4>file将写⼊fd4中的内容写⼊file中ls >&4Ls将不会有显⽰,直接写⼊fd4中了,即上⾯的file中exec 5<&4创建fd4的拷贝fd5exec 3<&-关闭fd31. exec 执⾏程序虽然exec和source都是在⽗进程中直接执⾏,但exec这个与source有很⼤的区别,source是执⾏shell脚本,⽽且执⾏后会返回以前的shell。
⽽exec的执⾏不会返回以前的shell了,⽽是直接把以前登陆shell作为⼀个程序看待,在其上经⾏复制。
举例说明:root@localhost:~/test#exec lsexp1 exp5 linux-2.6.27.54 ngis_post.sh test xen-3.0.1-install<logout>root@localhost:~/test#exec >textroot@localhost:~/test#lsroot@localhost:~/test#pwdroot@localhost:~/test#echo "hello"root@localhost:~/test#exec>/dev/ttyroot@localhost:~/test#cat textexp1exp5linux-2.6.27.54ngis_post.shtesttextxen-3.0.1-install/root/testhelloroot@localhost:~/test#Exec >text 是将当前shell的标准输出都打开到text⽂件中root@localhost:~/test#cat testroot@localhost:~/test#bashroot@localhost:~/test#exec <testroot@localhost:~/test#lsexp1 exp5 linux-2.6.27.54 ngis_post.sh test text xen-3.0.1-installroot@localhost:~/test#pwd/root/testroot@localhost:~/test#root@localhost:~/test#exit #⾃动执⾏2. exec的重定向先上我们进如/dev/fd/⽬录下看⼀下:root@localhost:~/test#cd /dev/fdroot@localhost:/dev/fd#ls0 1 2 255默认会有这四个项:0是标准输⼊,默认是键盘。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
source、sh、bash、./执行脚本的区别
1.source命令用法:
source FileName
作用:在当前bash环境下读取并执行FileName中的命令。
该filename文件可以无"执行权限"
注:该命令通常用命令“.”来替代。
如:source .bash_profile
. .bash_profile两者等效。
source(或点)命令通常用于重新执行刚修改的初始化文档。
source命令(从 C Shell 而来)是bash shell的内置命令。
点命令,就是个点符号,(从Bourne Shell而来)。
source的程序主体是bash,脚本中的$0变量的值是bash,而且由于作用于当前bash环境,脚本中set的变量将直接起效
2 sh, bash的命令用法:
sh/bash FileName
作用:打开一个子shell来读取并执行FileName中命令。
该filename文件可以无"执行权限"
注:运行一个shell脚本时会启动另一个命令解释器.
每个shell脚本有效地运行在父shell(parent shell)的一个子进程里.
这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程. shell脚本也可以启动他自已的子进程.
这些子shell(即子进程)使脚本并行地,有效率地地同时运行脚本内的多个子任务.
在ubuntu中sh只是bash的一个链接。
由于是在子shell中执行,脚本设置的变量不会影响当前shell。
3、./的命令用法:
./FileName
作用:打开一个子shell来读取并执行FileName中命令。
该filename文件需要"执行权限"
注:运行一个shell脚本时会启动另一个命令解释器.
每个shell脚本有效地运行在父shell(parent shell)的一个子进程里.
这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程. shell脚本也可以启动他自已的子进程.
这些子shell(即子进程)使脚本并行地,有效率地地同时运行脚本内的多个子任务. 由于是在子shell中执行,脚本设置的变量不会影响当前shell。