导航:首页 > 程序命令 > linux调用shell命令行

linux调用shell命令行

发布时间:2022-08-19 19:54:25

linux下的shell是什么

什么是shell
shell是用户和Linux
操作系统
之间的
接口
。Linux中有多种shell,其中缺省使用的是Bash。本章讲述了shell的工作原理,shell的种类,shell的一般操作及Bash的
特性

什么是shell
Linux系统的shell作为操作系统的
外壳
,为用户提供使用操作系统的接口。它是
命令语言
、命令
解释程序

程序设计语言
的统称。
shell是用户和
Linux内核
之间的接口
程序
,如果把Linux内核想象成一个
球体
的中心,shell就是围绕
内核
的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。
shell是一个命令语言
解释器
,它拥有自己内建的shell命令集,shell也能被系统中其他
应用程序
所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。
Shell是一种具备
特殊功能
的程序,
它是介于使用者和
UNIX/linux
操作系统之核心
程序(kernel)间的一个接口。为什么我们说
shell
是一种介于系统核心程序与使用者
间的中介者呢?读过操作系统概论的读者们都知道操作系统是一个
系统资源
的管理者与分
配者,当您有需求时,您得向系统提出;从操作系统的角度来看,它也必须防止使用者因
为错误的操作而造成系统的伤害?众所周知,对
计算机
下命令得透过命令(command)

是程序(program);程序有编译器(compiler)将程序转为
二进制代码
,可是命令呢?
其实shell
也是一支程序,它由
输入设备
读取命令,再将其转为计算机可以了解的机械码,
然后执行它。
各种操作系统都有它自己的
shell,以
DOS
为例,它的
shell
就是
command.com文
件。如同
DOS
下有
NDOS,4DOS,DRDOS
等不同的命令解译程序可以取代标准的
command.com
,UNIX
下除了
Bourne
shell(/bin/sh)
外还有
C
shell(/bin/csh)、
Korn
shell(/bin/ksh)、Bourne
again
shell(/bin/bash)、Tenex
C
shell(tcsh)
等其它的
shell。UNIX/linux将
shell
独立于核心程序之外,
使得它就如同一般的应用
程序,
可以在不影响操作系统本身的情况下进行修改、更新版本或是添加新的功能。
有一些命令,比如改变工作目录命令cd,是包含在shell
内部
的。还有一些命令,例如
拷贝
命令cp和移动命令rm,是存在于
文件系统
中某个目录下的单独的程序。对用户而言,不必关心一个命令是建立在shell内部还是一个单独的程序。
shell首先检查命令是否是
内部命令
,若不是再检查是否是一个应用程序(这里的应用程序可以是Linux本身的
实用程序
,如ls和rm,也可以是购买的商业程序,如xv,或者是
自由软件
,如emacs)。然后shell在搜索
路径
里寻找这些应用程序(搜索路径就是一个能找到可执行程序的目录列表)。如果键入的命令不是一个内部命令并且在路径里没有找到这个
可执行文件
,将会显示一条错误信息。如果能够成功找到命令,该内部命令或应用程序将被分解为
系统调用
并传给Linux内核。
shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在
高级语言
中能见到的程序
元素
,如
函数

变量

数组
和程序控制结构。shell
编程语言
简单易学,任何在提示符中能键入的命令都能放到一个可执行的shell程序中。
当普通用户成功登录,系统将执行一个称为shell的程序。正是shell进程提供了命令行提示符。作为默认值(TurboLinux系统默认的shell是BASH),对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符。
一旦出现了shell提示符,就可以键入
命令名称
及命令所需要的
参数
。shell将执行这些命令。如果一条命令花费了很长的时间来运行,或者在屏幕上产生了大量的输出,可以从
键盘
上按ctrl+c发出中断
信号
来中断它(在正常结束之前,中止它的执行)。
当用户准备结束登录对话进程时,可以键入logout命令、exit命令或文件结束符(EOF)(按ctrl+d实现),结束登录。

㈡ 如何运行linux shell程序

如何运行shell程序,如何在shell程序以及后续脚本中使用同一个变量,这些在工作中经常用到, 我找到如下的文章,再加深复习一下。
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。

4 export:
一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本
5. 举例
比如您在一个脚本里export $KKK=111 ,假如您用./a.sh执行该脚本,执行完毕后,您运行 echo $KKK ,发现没有值,假如您用source来执行 ,然后再echo ,就会发现KKK=111。因为调用./a.sh来执行shell是在一个子shell里运行的,所以执行后,结构并没有反应到父shell里,但是 source不同他就是在本shell中执行的,所以能够看到结果.
小测试
1 建立test.sh
#!/bin/bash
export s=/home/jboss/
2 执行命令: source test.sh
echo $s
结果输出: /home/jboss/
3 新开个shell
执行命令: ./test.sh
echo $s
结果: 没有输出s值

结论:
1、执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出。
2、一个shell中的系统环境变量才会被复制到子shell中(用export定义的变量);
3、一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消失(并不能返回到父shell中)。3、不用 export定义的变量只对该shell有效,对子shell也是无效的。

直接执行一个脚本文件是在一个子shell中运行的,而source则是在当前shell环境中运行的。
source可以让脚本影响它们的父shell环境,这和export去影响子shell环境相反.

㈢ 关于linux命令行,shell命令,vi命令

shell并不是一个所谓在“终端”执行的东西,而是一个linux内核与用户之间交互的界面,也可以理解成为是一个专业翻译的角色。
vi不过就是一个文本编辑器罢了,就如同DOS或Windows系统中的Edit一样,只不过这个vi文本编辑器的功能是可以靠添加模块来扩展罢了。在unxu或linux中还有一个文本编辑器叫‘emacs’,只不过这个编辑器更烦,更难于掌握。
其实linux并不难学,无非就是些常用的‘命令’罢了,而且这些所谓的‘命令’多半都是以源码的方式存在在系统中的。所谓‘命令行’不过就是调用这些源码后,然后让一个叫‘shell’的‘家伙’解释给linux内核去听。而这些所谓的‘命令’统统都在bin或是sbin的目录下面。
linux在用户登录以后,自行会启动一个shell,所有用户必须通过shell才能与系统会话。linux的所谓窗口界面,只不过就是系统在用户登录后自行调用了一个shell脚本而启动了Xwindow后的表象罢了。
所谓‘命令行’其实就是shell的解释命令。

㈣ linux系统调用 shell命令 c库函数怎么区分

首先,命令应该是好和其他两个区分开来的了,因为命令都是可以直接敲在shell上面回车执行的,而系统调用和库函数都不行;
其次,Linux系统调用和C库函数都是函数的形式,即都是“func(args)”的形式,但系统调用是
由系统内核对外提供的服务接口;C库函数和你自己写的普通的函数没有本质的区别,只是在C标准库中而已,Linux上面glibc就是C函数库。从表面上看两者不太好区分,不过,你可以从它们需要包含的头文件来区分,C库函数像printf在
中,std就是标准(standard)的缩写形式,因此在
中的函数,基本都是C库函数;像
ssize_t
read(int
fd,
void
*buf,
size_t
count);这样很多的系统调用是包含在
中的,unistd意思是UNIX
Standard,从这个意义就可以区分了。
希望对你有所帮助,如还有问题,可随时联系我:-)

㈤ linux下如何用c语言调用shell命令

参数type可使用“r”代表读取,“w”代表写入。依照此type值,popen()会建立管道连到子进程的标准输出设备或标准输入设备,然后返回一个文件指针。随后进程便可利用此文件指针来读取子进程的输出设备或是写入到子进程的标准输入设备中。此外,所有使用文件指针(FILE*)操作的函数也都可以使用,除了fclose()以外。 返回值:若成功则返回文件指针,否则返回NULL,错误原因存于errno中。 注意:在编写具SUID/SGID权限的程序时请尽量避免使用popen(),popen()会继承环境变量,通过环境变量可能会造成系统安全的问题。 例:C程序popentest.c内容如下: #include main() { FILE * fp; charbuffer[80]; fp=popen(“~/myprogram/test.sh”,”r”); fgets(buffer,sizeof(buffer),fp); printf(“%s”,buffer); pclose(fp); } 执行结果如下: xiakeyou@ubuntu:~/myprogram$ vim popentest.c xiakeyou@ubuntu:~/myprogram$ gcc popentest.c -o popentest xiakeyou@ubuntu:~/myprogram$ ./popentest /home/d/e/xiakeyou xiakeyou@ubuntu:~/myprogram$ 只是偶能力可能有点有限,没有太看懂。直接用system()倒是脚本可是执行,只是返回值却是一塌糊涂,试了多次也没有找到什么规律。不免又看了一下上面的那篇博文,得到一些启发,可以这样来实现: 先将脚本的返回值利用 echo > XXXXX 输出到一个本地文件中 当需要这个返回值是,可是通过C语言的文件操作函数来直接从文件中读取 后来一想,这应该就是上文中POPEN的实现方法! C程序调用shell脚本共有三种法子 :system()、popen()、exec系列函数 system() 不用你自己去产生进程,它已经封装了,直接加入自己的命令exec 需要你自己 fork 进程,然后exec 自己的命令 popen() 也可以实现执行你的命令,比system 开销小 1)system(shell命令或shell脚本路径); system()会调用fork()产生 子历程,由子历程来调用/bin/sh-c string来履行 参数string字符串所代表的命令,此命令履行 完后随即返回原调用的历程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被漠视 。 返回值:如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值。 如果 system()调用成功 则最后会返回履行 shell命令后的返回值,但是此返回值也有可能为system()调用/bin/sh失败所返回的127,因 此最好能再反省 errno 来确认履行 成功 。 system命令以其简略 高效的作用得到很很广泛 的利用 ,下面是一个例子 例:在~/test/目录下有shell脚本test.sh,内容为 #!bin/bash #test.sh echo hello 在同层目录下新建一个c文件system_test.c,内容为: #include int main() { system("~/test/test.sh"); } 履行 效果 如下: [root@localhost test]$gcc system_test.c -o system_test [root@localhost test]$./system_test hello [root@localhost test]$ 2)popen(char *command,char *type) popen()会调用fork()产生 子历程,然后从子历程中调用/bin/sh -c来履行 参数command的指令。参数type可应用 “r”代表读取,“w”代表写入。遵循此type值,popen()会建立 管道连到子历程的标准 输出设备 或标准 输入设备 ,然后返回一个文件指针。随后历程便可利用 此文件指针来读取子历程的输出设备 或是写入到子历程的标准 输入设备 中。此外,所有应用 文 件指针(FILE*)操作的函数也都可以应用 ,除了fclose()以外。 返回值:若成功 则返回文件指针,否则返回NULL,差错 原因存于errno中。

㈥ linux怎么进入shell命令窗口

进入控制台就进入了SHELL命令窗口了
使用Ctrl + Alt +T命令可以进入控制台。

㈦ linux下的shell命令,命令行,终端运行概念的解释

Shell:
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。
命令行(命令提示符):
命令行一般指命令提示符。命令提示符是在操作系统中,提示进行命令输入的一种工作提示符。在不同的操作系统环境下,命令提示符各不相同。
终端:
终端Terminal通常是指那些与集中式主机系统相连的“哑”用户设备。终端从用户接收键盘输入,并且将这些输入发送给主机系统。主机系统处理这个用户的键盘输入和命令,然后输出返回并显示在这个终端的屏幕上。

㈧ linux 怎么进入shell编程模式

1、连接上相应的linux主机,进入到等待输入shell指令的linux命令行状态下。

㈨ Linux主要shell命令详解

命令替换
命令替换和重定向有些相似,但区别在于命令替换是将一个命令的输出作为另外一个命令的参数。常用命令格式为:
command1
`command2`
其中,command2的输出将作为command1的参数。需要注意的是这里的`符号,被它括起来的内容将作为命令执行,执行后的结果作为command1的参数。例如:
$
cd
`pwd`
该命令将pwd命令列出的目录作为cd命令的参数,结果仍然是停留在当前目录下。

阅读全文

与linux调用shell命令行相关的资料

热点内容
女配重生不再纠缠男主 浏览:197
毒液2哪个平台能看 浏览:856
唐县解压手续费 浏览:7
爱情电影网伦理片 浏览:903
生成hostkey算法 浏览:621
重生香港买股票起家 浏览:623
职业规划程序员作文 浏览:926
如何安全关闭服务器 浏览:452
文件夹分成了两栏怎么办 浏览:379
宅运的最好算法 浏览:358
304数控编程 浏览:576
干程序员有前途吗 浏览:997
成龙保安公司电影 浏览:981
彼时曾相伴完整版网盘 浏览:351
android分享图片到qq空间 浏览:260
日漫电影主角是小人 浏览:194
一个叫悟空的外国电影 浏览:703
重生八路军抗日的小说 浏览:255
日本爱情电影有哪些 浏览:865
java大学实用教程答案 浏览:671