1.系统合法的shell和/etc/shells的功能
1.1.查看当前系统有多少我们可以使用的合法的shell
linux可以使用的合法的shell可以查看/etc/shells这个文件
[root@bogon etc]# cat /etc/shells /bin/sh (已经被/bin/bash所替代) /bin/bash(linux默认的shell) /sbin/nologin /bin/dash /bin/tcsh /bin/csh
1.2.查看当前用户默认取得的shell,查看/etc/passwd这个文件,如下所示
[root@bogon etc]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync
如上所示,在每一行的最后一个数据,就是你登录后可以取得的默认的shell.
2.bash shell 的内置命令:type
为了方便shell的操作,其实bash已经”内置“了很多的命令,例如cd、umask等命令,都是内置在bash当中的。
那我们怎么知道这个命令是来自外部命令(指的是其他非bash所提供的命令)还是内置在bash当中的呢?利用type这个命令来查看即可,使用如下:
type [-tpa] name 参数: type:不加任何参数是,type会显示出name是外部命令还是bash内置命令 -t :当加入-t时,type会将name以下面这些字眼显示出它的意义: file:表示为外部命令; alias:表示该命令为命令别名所设置的名称; builtin:表示该命令为bash的内置命令 -p :如果后面接的name为外部命令是,才会显示完整文件名 -a :会由PATH变量定义的路径中,将所有含name的命令都列出来,包含alias 实例一:查询ls这个命令是否为bash的内置命令 [root@bogon etc]# type ls ls is aliased to `ls --color=auto' ==》可以看出ls是一个命令别名 [root@bogon etc]# type -t ls alias ==》精简方式列出 [root@bogon etc]# type -a ls ls is aliased to `ls --color=auto' ls is /bin/ls ==》列出这个命令所在是文件 [root@bogon etc]# type -t cd builtin ==》cd 是bash的一个内置命令
3.shell的变量功能
3.1.变量的显示与设置:echo,unset
变量的显示:echo
[root@bogon etc]# echo $JAVA_HOME /usr/java/jdk1.7.0_55 [root@bogon etc]# echo ${JAVA_HOME} /usr/java/jdk1.7.0_55
3.2.设置变量或者修改变量
设置变量和修改变量是如此的简单,就是用等号(=)连接变量就ok了,例如:
[root@bogon etc]# myname=ickes [root@bogon etc]# echo $myname ickes
变量的设置规则需要注意的地方
1.等号两边不能直接接空格,如下面就是错误的
[root@bogon etc]# myname= ickes bash: ickes: command not found
2.变量名称只能为字母和数字,但是开头不能为数字
3.变量内容若有空格可以使用双引号(")或者单引号(')将变量内容结合起来,但是注意了
双引号里面的特殊字符如$等,可以保有原本的特性,如下所示
[root@bogon etc]# test="lang is $LANG" [root@bogon etc]# echo $test lang is en_US.UTF-8
单引号内的特殊字符则为一般字符(纯文本),如下所示
[root@bogon etc]# test='lang is $LANG' [root@bogon etc]# echo $test lang is $LANG
4、可以用转义字符(\)将特殊字符$等转变为一般字符
5、在一串命令当中,如果需要其他的命令提供信息,可以使用反单引号(`命令`)或者$(命令)。反单 引号是1键左边的那个键例如要取得当前操作系统内核的版本,如下所示:
[root@bogon etc]# version=`uname -r` [root@bogon etc]# echo $version 2.6.32-358.el6.i686 [root@bogon etc]# version1=$(uname -r) [root@bogon etc]# echo $version1 2.6.32-358.el6.i686
在命令执行过程中反单引号(``)和$()这两个符号代表的含义如何?
答:在一串命令当中,在`之内的命令将会被先执行,这个命令返回的结果将会作为外部的输入信息`
6、行业规矩全部大写的变量为环境变量,自行设置的变量为小写字母,方便判断。
3.3、取消变量:unset
[root@bogon etc]# myname=ickes [root@bogon etc]# echo $myname ickes [root@bogon etc]# unset myname [root@bogon etc]# echo $myname [root@bogon etc]#
3.4、子进程
什么是子进程呢?就是说在我目前这个shell的情况下,去打开另一个新的shell,新的那个shell就是子进程。在一般的状态下,父进程的自定义变量是无法再子进程内使用的。但是通过export将变量变成环境变量后,就能够在子进程下面应用了
例如:
[root@bogon ~]# name=ickes [root@bogon ~]# bash 进入子进程 [root@bogon ~]# echo $name 在子进程中显示变量 当然没有东西,因为子进程无法引用父进程的变量 [root@bogon ~]# exit 离开子进程 exit [root@bogon ~]# export name 将name这个变量设置为环境变量 [root@bogon ~]# bash 再次进入子进程 [root@bogon ~]# echo $name 显示变量 ickes 打印出来,格叽格叽! [root@bogon ~]# exit exit
4、环境变量的功能、与查看
4.1.用evn查看环境变量,与常见环境变量的说明
env命令可以列出了当前所有的环境变量
HOME:代表当前用户的主文件夹
SHELL:他告知我们目前这个环境变量使用的shell是那个程序?linux默认使用/bin/bash
HISTSIZE:这个与”历史命令“有关,就是我们曾经执行过的命令可以被系统记录下来,而记录下来的条数,就是有这个变量来指定
MAIL:当我们使用mail这个命令在收信时系统回去读取的邮件信箱文件
PATH:执行文件的路径变量
LANG:这个重要,就是语系数据,很多信息都会用到它。
RANDOM:这是”随机数“的变量,例如如下
[root@bogon ~]# echo $RANDOM 20801系统会随机生成一个0~32767的随机数
4.2.用set查看所有变量(包含环境变量和自定义变量)
查出一堆的东西,我也没有具体用到过,用到时,在补充,博客就是好,可以随时改
4.3.export:自定义变量转成环境变量
谈了env与set现在知道有所谓的环境变量与自定义变量,两种直接有什么差异呢?
答:两者直接的差异在于,该变量是否会被子进程所继续使用。
父进程跟子进程的解释
答:当你登录linux并取得一个bash之后,你的bash就是一个独立的线程,接下来你在这个bash下面所执行的任何命令都是由你这个bash所衍生出来的,那些被执行的命令就被称为子进程了。
如图所示
如上图所示,我们在原本的bash下面执行另一个bash,结果操作的环境接口会跑到第二个bash中去(这就是子进程),那原本的bash就会处于暂停的情况(sleep).若想回到原本的bash中去,就只能结束当前的子进程(exit或者logout).
这个程序概念与变量有什么关系呢?
答:关系可大了,因为子进程仅会继承父进程的环境变量,子进程不会继承父进程的自定义变量,所以你原本bash中的自定义变量在进入子进程后就会消失不见,直到退出子进程回到父进程才能引用。
如果将自定义变量换成环境变量后,在子进程中就可以继续访问上面已经介绍过了,这里就不啰嗦了!
待续!
相关推荐
Linux是开源的操作系统,它的命令行界面,尤其是Shell编程...因此,无论你是技术小白还是希望进一步提升,这份“Linux零基础学习笔记 Shell编程-菜鸟入门”都会是你宝贵的资源。祝你在学习的道路上越走越远,不断进步!
### Bash Shell 学习笔记知识点概览 #### 1. 引言 - **Shell**:作为用户与操作系统之间的桥梁,Shell提供了一种与系统进行交互的方式,支持用户执行命令和编写脚本来自动化任务。 - **Bash**:是Bourne-Again ...
### bash_shell笔记_1_脚本基础知识 #### 一、Shell基本概念与使用 Shell是Linux操作系统中的一个重要组成部分,它充当用户与系统内核之间的接口。通过Shell,用户可以执行命令、运行程序以及进行各种系统管理操作...
**Bash Shell 小笔记** Bash Shell是Unix/Linux操作系统中最常用的一种命令行解释器,全称为Bourne-Again SHell,它是GNU项目的一部分,是Linux系统默认的Shell环境。Bash Shell提供了丰富的命令行交互功能,允许...
《Linux命令行与Shell脚本编程大全》随书的一些源码、笔记_Linux_Shell-Bash-
根据给定的"Bash shell学习笔记"文件信息,我们可以从中提炼出多个重要的IT知识点,具体如下: ### 1. 引言 - **Shell的角色**:Shell作为一个命令解释器和编程语言,在用户与UNIX/Linux系统内核之间提供了一个桥梁...
bash快捷键、Linux有关网络配置的命令 一、创建shell脚本、重定向输入与输出、执行数学运算、退出脚本 二、shell脚本中的各种结构化命令的格式与用法(for、while、until、break等) 三、处理用户的输入:命令行参数...
Linux运维学习笔记:Shell脚本书写规范 Shell脚本是Linux系统中一种极为重要的工具,它能够帮助用户执行批量的命令操作,自动化日常运维任务。编写规范、易于理解的Shell脚本不仅有助于提高工作效率,而且方便日后...
Linux Shell笔记(未整理) Shell,作为Linux操作系统中的命令行解释器,是用户与系统交互的重要接口。它接收用户输入的指令,将其转化为系统可执行的命令,同时也提供了编写脚本的能力,使得复杂的任务自动化变得...
bash学习笔记:Bash_是_Unix_系统和_Linux_系统的一种_Shell(命令行环境),_Bourne-Again-SHell
最后,笔记还涉及了一些高级话题,如脚本编程(bash shell script)、系统监控(如top、htop、iotop等)、性能调优和故障排查方法。这些内容有助于提升读者解决实际问题的能力。 综上所述,《马哥的Linux学习笔记》...
这份“Linux Shell语言基础笔记xmind”显然是一个整理了Shell基础知识的思维导图文件,对于初学者或者需要复习Shell语法的人来说,是一个极好的学习资源。 首先,让我们来探讨一下Shell的基础知识。在Linux中,最...
Linux Bash是Unix和类Unix操作系统(如Linux)中默认的Shell,它是一个命令行解释器,用户通过它来与系统交互。Bash shell提供了一系列的命令行工具和语法,使得用户能够高效地管理文件、执行程序、自动化任务。这篇...
在Linux操作系统中,Bash(Bourne-Again SHell)是默认的命令行解释器,也是用户与系统交互的主要工具。这篇文档“linux常用命令之bash入门指南”旨在帮助初学者掌握Bash的基本用法和常用命令,从而更有效地在Linux...
1. **Linux基础知识**:笔记可能从Linux的历史、发展和核心概念开始,讲解操作系统的基本原理,如进程管理、内存管理、文件系统等。 2. **命令行操作**:Linux的强大在于其命令行工具,笔记可能会详细介绍各种常用...
Linux与Unix Shell编程指南读书笔记提供了深入理解和熟练掌握Shell脚本编写技巧的宝贵资源。Shell是Linux和Unix操作系统中的命令解释器,它不仅用于交互式地执行命令,还能编写自动化任务的脚本,极大地提高了系统...
Linux Shell变量知识点: 1. 变量概念: 在Linux Shell编程中,变量是存储数据的基本单元。变量可以看作是一个容器,用于临时存储字符串、数字等数据类型,包括但不限于路径、命令结果等。变量通过赋值操作符“=”...
一本特别实在的 Bash 笔记教程,学习效率很高。是一份不可多得的高效 Bash 学习材料。如果你想学习 Bash Shell、Bash 脚本编程,看它绝对没错。免费分享!不用积分,更不用付费! 或者从此处直接下载: ...
3. **Shell脚本**:Shell脚本是Linux系统中的批处理程序,使用Bash或其他Shell解释器执行。编写Shell脚本可以自动化日常任务,提高工作效率。基础元素包括变量、条件语句、循环、函数等。 4. **DDNS**:动态域名...