xml地图|网站地图|网站标签 [设为首页] [加入收藏]
来自 新闻动态 2019-09-28 16:45 的文章
当前位置: 新濠国际登录平台 > 新闻动态 > 正文

新濠国际登录平台一个Linux系统中有多少个可用的

Bash 的若干基本问题

Bash 的若干基本问题,Bash问题

Bash 的若干基本问题


  这里介绍一些bash启动前、后的问题,以及一些使用bash需要注意的基本问题。     1、Bash的介绍   Bash是一种Shell程序,它是一般的Linux系统中的默认的Shell程序,一般情况下Bash指的是/bin/bash这个软件。 一个Linux系统中有多少个可用的Shell程序,可以从/etc/shells文件中查出来。 当前登录用户的默认Shell是哪一个,可以从/etc/passwd文件中与此用户对应的那一行最后一个字段看出来。或者也可以通过echo $SHELL来查看。   2、内部命令与外部命令   Bash中可用的命令分为两类,分别是:内部命令和外部命令。内部命令是Bash的一部分,而外部命令都是一个一个独立于Bash的软件。   在bash的用户提示符下,可以输入内部命令和外部命令,然后bash会分析命令,之后执行命令。bash执行内部命令不会产生新的进程,而在执行外部命令的时候,bash会用fork函数生成一个新的进程,然后用exec函数来加载这个外部命令的程序来执行这个外部命令。   怎么来区分一个命令是内部命令还是外部命令呢?用type命令来区分。type本身是一个内部命令,type commandName可以知道commandName这条命令的是内部命令还是外部命令。   3、环境变量与用户自定义变量   环境变量是对所有的进程(包括bash的进程和非bash的进程)都可见的变量,一般用大写字母的组合作为变量名,所以也称为全局变量。   名词解析:临时环境变量和永久环境变量。其实全局变量都是通过export导出的变量。 临时全局变量是在bash的命令提示符下或者bash scripts下用export导出的变量,这些变量在机器重启之后会消失,除非再次执行export命令或者再次执行相应的scripts。 永久环境变量是写在配置文件中的,这些配置文件在每次重启机器甚至重开一个bash的时候都会被再执行一次,所以这些文件中的全局变量一直存在,不会因为重启机器而消失,看上去好像是永久的,其实是每次都重新export了。   用户自定义变量是对单个Bash可见的变量,其他任何从拥有这个变量的Bash生成的子进程(包括子bash进程和其他的子进程)都看不到这个变量,所以也称为局部变量。   环境变量和用户自定义变量的主要区别是:环境变量会被bash启动的子进程继承,而自定义变量不会被bash的子进程继承。   系统中的环境变量,可以用env命令和export命令来查看。在bash的命令提示符下直接输入env或者export都将列出系统的所有环境变量。 在bash下输入set命令既可以看到系统的环境变量,也可以看到此bash所拥有的用户自定义变量,另外列出的变量中还有一些是与bash的操作接口有关的变量。   4、shell scripts的执行方式   bash脚本程序的执行方式,一种是由本bash来分析scripts,然后执行,第二种是另外启动一个新的bash进程,由新bash进程来分析和执行scripts。 在本bash中分析和执行scripts的做法,用source命令或者点命令来执行: [[email protected] Scripts]$ source test.sh [[email protected] Scripts]$ . test.sh   另起一个bash进程执行,有两种方式: [[email protected] Scripts]$ bash test.sh   [[email protected] Scripts]$ chmod a+x test.sh (这里需要在test.sh的开头要用shebang注明将要使用的shell) [[email protected] Scripts]$ ./test.sh   5、Bash下的单个命令的交互执行过程   用户在bash的命令提示符下输入一条命令,bash就解释执行一条,这种方式成为交互式。 交互式的情况下内部命令的执行:用户输入了一条内部命令之后,bash分析命令,直接执行。执行内部命令相当于执行bash的一个函数。 交互式的情况下外部命令的执行:用户在命令行输入一条命令后,bash会分析这条命令的合法性,之后会fork出一个新进程,并在新进程中exec这条命令的程序。   6、shell scripts的执行过程   bash中scripts的执行过程与执行方式有关系。当用source或者点命令时是由本bash来执行此scripts的,如果是由bash命令或者直接执行脚本,则是另起一个子bash进程来执行scripts的。   那么一个bash进程或者bash的子进程又是怎么执行scripts的呢? [[email protected] Scripts]$ source test.sh 这条命令执行后,当前bash会把test.sh当成一个命令行参数读入,之后从test.sh中读取一条、分析一条、执行一条,直至全部执行完毕。   [[email protected] Scripts]$ bash test.sh 这条命令执行后,当前bash会另外启动一个子bash进程,子bash把test.sh当成自己的命令行参数读入。 之后,子bash会从test.sh中读取一条,分析一条,执行一条。在这个过程中,如果读取的是内部命令,直接调用自己的对应函数;如果读取的是一个外部命令,那么它会fork一个子进程,然后在子进程中exec这个外部命令的程序,执行它。 直到test.sh中所有的命令都执行完了,子bash会结束,返回到当前bash中。   7、Bash的操作环境   登录系统前的欢迎信息放在/etc/issue中、登录后想要显示的信息放在/etc/motd中。   login shell:在进入bash的时候,经过了完整的输入用户名和密码的登录过程,之后才进入bash,那么这个bash叫做login shell。   non login shell:在进入bash的时候,不需要经过登录过程,那么这个bash就是non login bash。比如,在X Window下,打开一个terminal终端,之后进入的bash,就是non login shell;又不如,在命令提示符下输入bash,之后进入的bash也是non login shell。   login shell在进入之前要读取/etc/profile、~/.bash_profile或~/.bash_login或~/.profile等配置文件,而在~/.bash_profile中又会执行~/.bashrc文件。 non login shell在进入之前只会读取~/.bashrc文件。   login shell在注销退出的时候会读取~/.bash_logout配置文件的内容,而non login shell则不会读取。   ~/.bash_history文件记录了上次及以前的会话中login shell使用过的命令。     以上基本问题搞清楚了,bash的使用过程中很多问题就清楚了。余下的问题是Bash内的问题,就是怎么学习bash脚本编程的问题和各个命令的用法问题了。        

的若干基本问题,Bash问题 Bash 的若干基本问题 这里介绍一些bash启动前、后的问题,以及一些使用bash需要注意的基本问题。 1、Bash的介...

●Shell文件包含


像其他语言一样,Shell 也可以包含外部脚本,将外部脚本的内容合并到当前脚本。

 

 

这里介绍一些bash启动前、后的问题,以及一些使用bash需要注意的基本问题。

Shell 中包含脚本可以使用:

 

. filename

 

1、Bash的介绍

source filename

=========== 

两种方式的效果相同,简单起见,一般使用点号(.),但是注意点号(.)和文件名中间有一空格。

Bash是一种Shell程序,它是一般的Linux系统中的默认的Shell程序,一般情况下Bash指的是/bin/bash这个软件。

 

一个Linux系统中有多少个可用的Shell程序,可以从/etc/shells文件中查出来。

例如,创建两个脚本,一个是被调用脚本 subscript.sh,内容如下:

当前登录用户的默认Shell是哪一个,可以从/etc/passwd文件中与此用户对应的那一行最后一个字段看出来。或者也可以通过echo $SHELL来查看。

url=""

 

一个是主文件 main.sh,内容如下:

2、内部命令与外部命令

#!/bin/bash

==================== 

. ./subscript.sh

Bash中可用的命令分为两类,分别是:内部命令和外部命令。内部命令是Bash的一部分,而外部命令都是一个一个独立于Bash的软件。

echo $url

 

 

在bash的用户提示符下,可以输入内部命令和外部命令,然后bash会分析命令,之后执行命令。bash执行内部命令不会产生新的进程,而在执行外部命令的时候,bash会用fork函数生成一个新的进程,然后用exec函数来加载这个外部命令的程序来执行这个外部命令。

执行脚本:

 

$chomd +x main.sh

怎么来区分一个命令是内部命令还是外部命令呢?用type命令来区分。type本身是一个内部命令,type commandName可以知道commandName这条命令的是内部命令还是外部命令。

./main.sh

 

http:// www.oschina.net/

3、环境变量与用户自定义变量

$

=====================

注意:被包含脚本不需要有执行权限。

环境变量是对所有的进程(包括bash的进程和非bash的进程)都可见的变量,一般用大写字母的组合作为变量名,所以也称为全局变量。

 

 

1、source命令用法:

名词解析:临时环境变量和永久环境变量。其实全局变量都是通过export导出的变量。

    source FileName

临时全局变量是在bash的命令提示符下或者bash scripts下用export导出的变量,这些变量在机器重启之后会消失,除非再次执行export命令或者再次执行相应的scripts。

    作用:在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限"

永久环境变量是写在配置文件中的,这些配置文件在每次重启机器甚至重开一个bash的时候都会被再执行一次,所以这些文件中的全局变量一直存在,不会因为重启机器而消失,看上去好像是永久的,其实是每次都重新export了。

    注:该命令通常用命令“.”来替代。

 

    如:source .bash_profile

用户自定义变量是对单个Bash可见的变量,其他任何从拥有这个变量的Bash生成的子进程(包括子bash进程和其他的子进程)都看不到这个变量,所以也称为局部变量。

        . .bash_profile两者等效。

 

    source(或点)命令通常用于重新执行刚修改的初始化文档。

环境变量和用户自定义变量的主要区别是:环境变量会被bash启动的子进程继承,而自定义变量不会被bash的子进程继承。

    source命令(从 C Shell 而来)是bash shell的内置命令。

 

    点命令,就是个点符号,(从Bourne Shell而来)。

系统中的环境变量,可以用env命令和export命令来查看。在bash的命令提示符下直接输入env或者export都将列出系统的所有环境变量。

 

在bash下输入set命令既可以看到系统的环境变量,也可以看到此bash所拥有的用户自定义变量,另外列出的变量中还有一些是与bash的操作接口有关的变量。

2、./的命令用法:

 

     ./FileName

4、shell scripts的执行方式

     作用:打开一个子shell来读取并执行FileName中命令。

=======================

 

bash脚本程序的执行方式,一种是由本bash来分析scripts,然后执行,第二种是另外启动一个新的bash进程,由新bash进程来分析和执行scripts。

     注:运行一个shell脚本时会启动另一个命令解释器.

新濠国际登录平台,在本bash中分析和执行scripts的做法,用source命令或者点命令来执行:

         每个shell脚本有效地运行在父shell(parent shell)的一个子进程里.

[zzl@myhost Scripts]$ source test.sh

            这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程.

[zzl@myhost Scripts]$ . test.sh

         shell脚本也可以启动他自已的子进程.

 

            这些子shell(即子进程)使脚本并行地,有效率地地同时运行脚本内的多个子任务.

另起一个bash进程执行,有两种方式:

 

[zzl@myhost Scripts]$ bash test.sh

3、sh和bash命令用法:

 

     sh FileName

[zzl@myhost Scripts]$ chmod a+x test.sh (这里需要在test.sh的开头要用shebang注明将要使用的shell)

     bash FileName

[zzl@myhost Scripts]$ ./test.sh

     作用:在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限"

 

     注:两者在执行文件时的不同,是分别用自己的shell来跑文件。

本文由新濠国际登录平台发布于新闻动态,转载请注明出处:新濠国际登录平台一个Linux系统中有多少个可用的

关键词: