bash与sh的问题

bash与sh的问题,第1张

在ubuntu中,sh只是bash的一个链接,执行的程序都是一样的,命令解释器是一样的。

bash xxxsh和

/xxxsh和

sh xxxsh

还是有不同的,bash xxxsh和sh xxxsh都已经是直接执行命令,脚本程序作为这个命令的参数,不存在可行性权限的问题,而/xxxsh则必须具有可执行权限,在部分自动化的脚本中出现像/xxxsh这个的语句可能会出错。

然后,三条命令本身的语句不一样,部分脚本程序在执行时喜欢检测一下命令名本身([ "$0"]),对不同的命令会作出不同的反应,这个是取决与脚本本身的。

我没看过楼主的脚本,猜测,可能在xxxsh这个脚本中有一条语句对命令名进行检测,然后进行条件跳转。

if [ "$0" = "sh xxxsh" ]

then

fi

bash 是一个为GNU项目编写的Unix shell,也就是linux用的shell。

Shell俗称壳(用来区别于内核),是指“提供使用者使用界面”的软件,就是一个命令行解释器。

BASH是SHELL的一种,是大多数LINUX发行版默认的SHELL,除BASH SHELL外还有C SHELL等其它类型的SHELL。

扩展资料:

linux主要特性:

1,基本思想:

Linux的基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、 *** 作系统、进程等等对于 *** 作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也是因为这两者的基本思想十分相近。

2,完全免费:

Linux是一款免费的 *** 作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。这是其他的 *** 作系统所做不到的。正是由于这一点,来自全世界的无数程序员参与了Linux的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变,这让Linux吸收了无数程序员的精华,不断壮大。

3,完全兼容POSIX10标准:

这使得可以在Linux下通过相应的模拟器运行常见的DOS、Windows的程序。这为用户从Windows转到Linux奠定了基础。许多用户在考虑使用Linux时,就想到以前在Windows下常见的程序是否能正常运行,这一点就消除了他们的疑虑。

4,多用户、多任务:

Linux支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。多任务则是现在电脑最主要的一个特点,Linux可以使多个程序同时并独立地运行。

5,良好的界面:

Linux同时具有字符界面和图形界面。在字符界面用户可以通过键盘输入相应的指令来进行 *** 作。它同时也提供了类似Windows图形界面的X-Window系统,用户可以使用鼠标对其进行 *** 作。在X-Window环境中就和在Windows中相似,可以说是一个Linux版的Windows。

参考资料:

百度百科-linux

#!/bin/bash

for file in /

do

    if test -f $file

    then

        name=`basename $file`

        first_line=`sed '1!d' $file`

        if [ "$first_line" == "#!/bin/bash" ]

        then

            echo $name

        fi

    fi

done

我解释下代码,首先,在for循环中遍历当前目录下的所有文件,然后外层的if判断当前文件类型,如果是文件,则使用basename $file用来获取当前文件的文件名(包括拓展名)并赋值给变量name中,然后使用sed '1!d' $file获取文件第一行的内容并赋值给变量first_line,再在内层的if中判断第一行的内容是否是“#!\bin\bash”,如果是,则打印该文件的文件名。

ps:我也是刚学shell,写了半天才整出来,就当是自己也顺便练手了,哈哈。

我在我电脑上测试了下,没有问题,如果你还有问题请追问。

#!

/bin/sh

是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面根的是此解释此脚本的shell的路径。

$bash

$表示系统提示符,$

表示此用户为普通用户,超级用户的提示符是#。

bash是shell的一种,是linux下最常用的一种shell。

$bash的意思是执行一个子shell,此子shell为bash。

要注意,在每个脚本的开头都使用"#!",这意味着告诉你的系统这个文件的执行需要指定一个解

释器#!实际上是一个2字节[1]的魔法数字,这是指定一个文件类型的特殊标记,

换句话说,

这种情况下,指的就是一个可执行的脚本(键入man

magic来获得关于这个迷人话题的更多详细

信息)在#!之后接着是一个路径名这个路径名指定了一个解释脚本中命令的程序,这个程序可

以是shell,程序语言或者是任意一个通用程序这个指定的程序从头开始解释并且执行脚本中

的命令(从#!行下边的一行开始),忽略注释[2]

如:

1

#!/bin/sh

2

#!/bin/bash

3

#!/usr/bin/perl

4

#!/usr/bin/tcl

5

#!/bin/sed

-f

6

#!/usr/awk

-f

注意:

#!

后边给出的路径名必须是正确的,否则将会出现一个错误消息,通常是

"command

not

found",这将是你运行这个脚本时所得到的唯一结果

如果在脚本的里边还有一个#!行,那么bash将把它认为是一个一般的注释行

后缀是“sh”。请参考:

如何在Windows下定期执行一个Bash程序

1需要安装Cygwin,详见我写的Cygwin使用心得

2将Cygwin下面的/bin设置到系统PATH中,比如PATH=%PATH%;c:/cygwin/bin

3Bash程序里面,如果命令与Windows有冲突的,需要指定路径,比如find命令,Windows也有find命令,但不如Bash下

面的强大,你需要在程序里指定路径,如下:

/bin/find / -type f -mtime -10 -mtime +15 -exec rm -f {} \;

(或者,你可以将c:/cygwin/bin/放在PATH的最前面)

与Windows没冲突的命令,你可以直接使用,比如tar,ssh等

4制定一个任务与计划,计划的执行命令为:

c:\cygwin\bin\bashexe c:\scripts\bash\ipaddr\bcomcnsh

补充:

Windows下在的Schedular调用Bash Scripts需要注意以下几点:

1调用方法:D:/cygwin/bin/bashexe D:/mt/scripts/bashsh (可设置启动路径为D:/mt/scripts/)

2必须将D:/cygwin/bin加到系统的%PATH%环境变量,否则,除Bash内部命令外,其它Unix命令不可用

3如果D:/cygwin/bin加在%PATH%最后面,则某些与Windows同名的程序,需要使用全路径,比如:

/bin/find –type f –name “”

如果D:/cygwin/bin放在%PATH%最前面,则可以直接使用find,为安全起见,建议Bash Scripts里面使用全路径的find命令

4所有系统变量会带到Bash Scripts里面,比如Windows里的COMPUTERNAME可以Scripts里面直接使用$COMPUTERNAME调用。

5可直接调用Dos命令,如taskkill /F /IM processexe , C:/progra~1/winrar/rar a bcomcnrar D:/bcomcn/

6路径分隔符使用/,而不是\

来源:

>

以上就是关于bash与sh的问题全部的内容,包括:bash与sh的问题、在linux下 什么是bash.什么又是shell、shell 编写一程序,列出当前目录下指定文件的文件名,文件的首行为#!/bin/bash等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10074409.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存