Shell基础及变量

本文详细介绍了Shell的基础知识,包括Shell的作用、类型,特别是Bash的使用。讲解了命令别名的设置与删除,以及Shell脚本的优点。深入探讨了Shell中的变量,如本地变量、环境变量和内部变量,强调了变量命名规则和使用注意事项。同时,提到了环境变量的设置、显示和清除。最后,文章列举了Shell中的特殊字符及其用途。

Shell概述

Shell的作用——命令解释器,“翻译官” 

shell作为一个人机接口,用于解释用户输入的命令,将命令解释为 Linux内核可以执行的2进制代码,并将执行的结果返回在标准终端上。

Shell在Linux系统中的位置Shell的分类 

Shell的分类 

Bourne Shell:从1979起Unix就开始使用,Bourne Shell的主文件 名为sh。

C Shell: C Shell主要在BSD版的Unix系统中使用,其语法和C语言相类似而得名。

Shell的两种主要语法类型有Bourne和C,这两种语法彼此 不兼容。

Bash: Bash与sh兼容,现在使用的Linux就是使用Bash 作为用户的基本Shell。 其属于Bourne家族。
 


Shell基础

命令别名
 alias 别名='原命令'

例:alias grep=‘grep --color=auto’(注意等号两边不能有空格)

alias的作用仅在该次登入的操作,即输入一次alias后,这个修改只在当前的 Shell生效。如果重新开启一个 Shell,或者重新登录,则这些alias将无法使 用。好在linux中提供alias永久化的方法:

1.若要每次登入就自动生效别名,则把别名加在/etc/profile或~/.bashrc 中。然后# source ~/.bashrc

2.若要让每一位用户都生效别名,则把别名加在/etc/bashrc最后面,然 后# source /etc/bashrc

删除别名

unalias 别名

 

多命令顺序执行

echo输出命令

功能说明:显示文字。

语 法:echo [-ne][字符串] 

-e:支持反斜线控制的字符转换

-n:不要在最后自动换行

\b:删除前一个字符

\t:出入tab

Shell脚本的优点

使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象。缺点是:它们的 效率通常不如编译型语言。不过权衡之下,通常使用脚本编程还 是值得的:花一个小时写成的简单脚本,同样的功能用C或C++来 编写实现,可能需要两天,而且一般来说,脚本执行的速度已经够 快了,快到足以让人忽略它性能上的问题。

Shell脚本的基本元素

(1) #!/bin/bash 必须的,指出shell的类型

(2)# 注释

(3)变量

(4)控制
 

Shell脚本的两种运行方式

chmod +x test.sh  #使脚本具有执行权限--> ./test.sh  #执行脚本

/bin/sh test.sh

 


Shell中的变量和符号

变量

shell 变量 可以保存如路径名、文件名或者一个数字

变量名称可以由字母、数字和下划线组成,但是不能以 数字开头。如果变量名是“2name”则是错误的。

在Bash中,变量的默认类型都是字符串型,如果要进 行数值运算,则必修指定变量类型为数值型。

变量分类

  • 本地变量(用户变量) 局部变量只在创建它们的Shell中使用,可以 在shell程序内任意使用和修改它们。
  • 环境变量 可以在创建它们的Shell及其派生出来的任意子程序中使用 。有些变量是用户创建的,其他的则是专用的(比如PATH、HOME) 。是系统环境的一部分,不必去定义它们,可以在shell程序中使用它 们 。还能在shell中加以修改。
  •  内部变量 由系统提供的。与环境变量不同,但用户不能修改它们。

本地变量

本地变量 在用户现在的shell生命期的脚本中使用

用法为  变量名=值
注意: 

(1)等号两边不可以有空格

(2)取值包含空格,必须用双引号括起来

(3)Shell变量可以用大小写字母,区分大小写

变量的声明和使用

(1)变量是弱类型的(不用声明类型)

(2)变量声明及赋值格式 变量=值(等号两边不能有空格)

(3)变量的引用 $变量名

                           ${变量名}

  变量名为1个字符时建议使用方式一,多余一个字符时建议使 用方式二

  举例:   $a     ${abc}

清除变量

unset 变量名

举例:echo ${name}

          unset name (注意:name前没有$) 

使用set 命令可查看本地所有变量


环境变量

环境变量用于所有用户进程(通常称为子进程)。登陆进程称为父进程,通过pstree可以查看 

环境变量可以在命令行中设置,但用户注销时这些值 将丢失

环境变量均为大写

必须用export命令导出

设置环境变量

VARIABLE-NAME=value

export VARIABLE-NAME(环境变量名大写) 

显示环境变量

env 可以看到所有的环境变量

echo $环境变量名 (显示一个变量)

清除环境变量

unset 环境变量名

常见环境变量

HOME : 代表使用者的家目录。cd ~ 去到使用者的家目录 或者利用 cd 就可以直接回到使用者家目录了。

HISTSIZE : 这个与“历史命令”有关,曾经下达过的指令可以被系统记录下来,而记录的“数目”则是由这个值来设定的。 

PATH : 就是执行文件搜寻的路径,目录与目录中间以冒号(:)分隔, 由 于文件的搜寻是依序由 PATH 的变量内的目录来查询,所以,目录的顺序也是重要的喔。 

ENV : 这个使用者所使用的个性化环境设置文件的读取文件。 

SHELL : 目前这个环境使用的 SHELL 是哪个程序? 如果是 bash 的话, 预设是 /bin/bash 

PWD:用户当前工作目录的路径。它指出用户目前在Linux文件系统中处在什么位置。它是由Linux自动设置的

LANG : 语系文件,很多数据都会用到他,当出现编码错误的时候往往需要设置它,中文编码是zh_CN.UTF8

MAIL : 当我们使用 mail 这个指令在收信时,系统会去读取的邮件信箱 文件 (mailbox)。 

让环境变量的修改在退出shell再次登录时仍有效,需要在相关配置文件中修改

Bash的初始化文件有:/etc/profile、~/.bash_profile、 ~/.bash_login、~/.profile、~/.bashrc、/etc/bashrc

初始化文件描述

  1. /etc/profile 存放一些全局(共有)变量,不管哪个用户, 登录时都会读取该文件。通常设置一些Shell变量PATH,USER,HOSTNAME和HISTSIZE等
  2. ~/.bash_profile:每个用户都可使用该文件输入专用于自己 使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情 况下,他设置一些环境变量,执行用户的.bashrc文件
  3. ~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取.
  4. /etc/bashrc:为每一个运行bash shell的用户执行此文件.当 bash shell被打开时,该文件被读取

上述配置文件的作用

1)登录Linux先启动系统配置文件/etc/profile,并从 /etc/profile.d目录的配置文件中搜集shell的设置,为 系统的每个用户设置环境信息。

2)用户配置文件~/.bash_profile,每个用户专用于自己 使用的shell信息,仅用户登录时执行一次! 默认情况下,此文件通过脚本执行同目录下用户的 .bashrc文件。

3)~/.bashrc文件包含专用于用户bash shell的bash信 息,登录及每次打开新的shell时都会执行。里面又会调 用/etc/bashrc


内部变量

内部变量是Linux所提供的一种特殊类型的变量,这类变量在 程序中用来作出判断。在shell程序内这类变量的值是不能修 改的。 

部分内部变量是:

$# ——传送给shell程序的位置参数的数量

$?——最后命令的完成码或者在shell程序内部执行的shell程序(返回值)。0表示没有错误,其他任何值表明有错误 。

$0——shell程序的名称

$@——调用shell程序时所传送的全部参数的单字符串, “参数1”“参数2”…形式保存的参数

$* ——“参数1 参数2”…形式保存的参数 $n 第n个参数

$$ ——本程序的PID

 

Shell中的特殊字符

1、注释符# 除了#!/bin/bash里的#特殊

2、美元符 $ 变量符。与反斜杠转义符相反,使其后的普通字符作 为变量名,如$a表示变量a的值。变量字符长度超过1个时,用{}括起来

3、单引号被引起的字符全部做普通字符,即全部原样 echo ‘my $SHELL’

4、双引号。引号内的内容,除$、转义符\、倒引号`这三个保留特殊功能,其他字符均做普通字符。

5、倒引号(数字1键旁边的那个键) 引号内的字符串当做shell命令行解释执行,得到的结果取代整个倒引号括起来的部分。
 

6. 反斜线 反斜线是转义字符,它能把特殊字符变成普通字符。在某个字符前面利用反斜杠(\)能够阻止shell把后面的字符解释为特殊字符。

注意:在单引号括起来的字符串中,反斜线也成为普通字符,而失去转义 字符功能。

7.获取字符串长度

string="abcd"

echo ${#string} #输出 4

8.提取子字符串

以下实例从字符串第 2 个字符开始截取 4 个字符

string="runoob is a great site"

echo ${string:1:4} # 输出 unoo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值