shell基础--shell的运算符

目录

一、数值运算的方法

1.declare命令 实现声明变量的类型。

例:数值运算

例:数组变量类型

例:查询变量属性和取消变量属性

二、shell常用运算符:

变量的测试与内容置换:

三、环境变量配置

source 命令功能:

2.环境变量配置文件

/etc/profile

/etc/profile.d/*.sh

~/.bash_profile

~/.bashrc

/etc/bashrc

3.其他配置文件

1)/etc/issue

2)/etc/issue.net

3)/etc/motd


、数值运算的方法

如果我们需要进行数值运算,可以采用以下三种方法中的任意一种:

使用declare声明变量类型:既然所有变量的默认类型是字符串型,那么只要我们把变量声明为整数型就可以进行运算了。

1.declare命令 实现声明变量的类型。

命令如下:

格式:declare

【+/-】【子选项】 变量名   

子选项:

-:给变量设定类型属性。

+:取消变量的类型属性。

-a:将变量声明为数组型。

-i:将变量声明为整数型(integer)。

-r:将变量声明为只读变量。注意,一旦设置为只读变量,既不能修改变量的值也不能删除变量,甚至不能通过+r取消只读属性。

-x:将变量声明为环境变量。

-p:显示指定变量的被声明类型。

例:数值运算

【】# aa=11

【】# bb=22

【】# declare -i cc=$aa+$bb  #将变量声明为整数型。

【】# echo $cc

33

例:数组变量类型

所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量集合。这个名字成为数组,编号称为下标。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也会称为下表变量。

变量和数组都是用来保存数据的,只是变量只能赋予一个数据值,一旦重复赋值,后一个值就会覆盖前一个值。而数组可以赋予一组相同类型的数据值。

例:

【】# name[0]="aa"   #数组中第一个变量是“aa”

【】# name[1]="bb"   #数组中第二个变量是“bb”[root@localhost ~]# name[2]="cc"   #数组中第三个变量是“cc”

【】# echo $name     #输出数组的内容,如果只写数名,

aa

那么只会输出第一个下标变量。

[root@localhost ~]# echo ${name[1]}  #下表1输出了bb

bb

【】# echo ${name[*]}  #用数组【*】输出数组所有

内容

aa bb cc

(数组下表是从0开始的,在调用数组时,需要用${数组[下标]}的方式来读取)

例:环境变量

我们可以用declare命令把变量声明为环境变量,和export命令的作用是一样的。

【】# declare -x test=123 #用declare命令-x选项将test=123声明为环境变量。

【】# env | grep test   #在env中查找是否有test的环境量。

test=123

(环境变量可用在创建变量的shell和从该shell派生的任意子shell或进程中,因此,环境变量通常又被称为全局变量。环境变量被创建时所处的shell被称为父shell,如果在父shell中再创建一个shell,那么该shell被称为子shell。当子shell产生时,它会继承父shell的环境变量为自己所用,所以说环境变量可从父shell传给子shell。但注意,环境变量只能向下传递而不能向上传递。“传子不传父”)

例:只读属性

【】# declare -r test  #给test赋予只读属性

【】# test=456         #test变量的值不能修改了

bash: test: readonly variable        #bash, test,只读变量

【】# declare +r test  #试图取消只读属性

bash: declare: test: readonly variable

#失败..

【】# unset test      #删除变量

bash: unset: test: cannot unset: readonly variable

#再次失败.....

(一旦给变量设定了只读属性,那么这个变量既不能修改变量的值,也不能删除变量,不能用+r选项取消只读属性。但是,因为这个变量只是命令行声明的,所以只要重新登录或重启,这个变量就会消失。)

例:查询变量属性和取消变量属性

变量属性的查询使用-p选项,变量属性的取消使用+选项。命令如下:

【】# abc=123           #变量赋值abc=123

【】# declare -p abc    #用declare -p查看

declare -- abc="123"

【】# declare -i abc    #declare -i声明变量abc为整数型

【】# declare -p abc    #查看

declare -i abc="123"

【】# name[0]=aa    #数组

【】# name[1]=bb

【】# name[2]=cc

【】# declare -p name    #查看数组型

declare -a name='([0]="aa" [1]="bb" [2]="cc")'

【】# declare -p test  #test变量是环境变量和只读变量

declare -rx test="123"

【】# declare +x test  #取消test变量的环境变量属性

【】# declare -p test  #查看test

declare -r test="123"

、shell常用运算符:

算数符运算是指加,减,乘,除,余等常见运算,值得注意的是shell只支持整数计算,也就是所有可能产生小数的运算都会舍去小数部分。例1:加减乘除

【】# aa=$(( (11+3)*3/2 ))

【】# echo $aa

21                #虽然乘除的优先级高于加,但是通过小括号可以调整运算优先级。

  1. 变量的测试与内容置换:

变量y存在则输出变量y,变量y不存在则输出自己设定的新值

变量置换方式

变量y没有设置

变量y为空值

变量y设置值

x=${y-新值}

x=新值

x为空

x=$y

x=${y+新值}

x为空

x=新值

x=新值

x=${y=新值}

x=新值

y=新值

x为空

y值不变

x=$y

y值不变

例1:x=${y-新值}

【】# unset y

【】# x=${y-new}

【】# echo $x

new

【】# echo $y

【】#           #变量y没有设置值时,x=新值。

【】# y=""

【】# x=${y-new}

【】# echo $x

【】#              #变量y为空时,x为空。

【】# y=aa

【】# x=${y-new}

【】# echo $xaa    #变量y为aa时,x=$y。

、环境变量配置

  1. source 命令功能:

在不退出登录的情况下,能够让环境变量的修改立即生效。

例如,当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用source命令,如source /etc/profile。

【】# source 环境变量配置文件

【】# . 环境变量配置文件

2.环境变量配置文件

1)登录时生效的环境变量配置文件

在Linux系统登录时主要生效的环境变量配置文件有以下五个:

/etc/profile

/etc/profile.d/*.sh

~/.bash_profile

~/.bashrc

/etc/bashrc

注意:在7.3和7.6版本的centos中,额外写入到/etc/profile文件的变量定义并不会在正常登录后生效。在su -切换用户后生效。建议写入到/etc/bashrc或/~/.bashrc中。

/etc/profile:

在用户登录过程先调用/etc/profile文件在这个环境变量配置文件中会定义这些默认环境变量:

USER变量:根据登录的用户,给这个变量赋值(就是让USER变量的值是当前用户)

LOGNAME变量:根据USER变量的值,给这个变量赋值。

MAIL变量:根据登录的用户,定义用户的邮箱为/var/spool/mail/用户名。

PATH变量:根据登录用户的UID是否为0,判断PATH变量是否包

含/sbin/,/usr/sbin/,/usr/local/sbin/这三个系统命令目录。

HOSTNAME变量:更改主机名,给这个变量赋值。

HISTSIZE变量:定义历史命令的保存条数。

umask:定义umask默认权限。注意/etc/profile文件中umask权限是在“有用户登录过程(也就是输入了用户名和密码)”时才会生效。

/etc/profile.d/*.sh

调用/etc/profile.d/*.sh文件,也就是调用/etc/profile.d/目录下所有以.sh结尾的文件。

由/etc/profile文件调用/etc/profile.d/*.sh文件这个目录中所有以.sh结尾的文件都会被/etc/profile文件调用,这里最常见的就是lang.sh文件,而这个文件又会调用/etc/sysconfig/i18n文件(默认语系配置文件entos6)。

~/.bash_profile文件主要有两个功能:

调用了~/.bashrc文件。

在PATH变量后面加入了”:$HOME/bin“这个目录。那也就是说,如果我们在自己的家目录中建立bin目录,然后把自己的脚本放入~/bin目录,就可以直接执行脚本,而不是通过绝对路径执行(需要创建~/bin/目录)。

由~/.bash_profile文件调用~/.bashrc文件在~/.bashrc文件中主要实现了:

定义默认别名,所以自己定义的别名也放进了这个文件。

调用/etc/bashrc

由~/.bashrc调用了/etc/bashrc文件在/etc/bashrc文件中主要定义了这些内容: PS1变量:也就是用户的提示符,如果我们想要永久修改提示符,就要在这个文件中修改。

umask:定义umask默认权限。这个文件中定义的umask是针对”没有登录过程(也就是不需要输入用户名和密码时,比如从一个终端切换到另一个终端,或者进入子shell)“时生效的。如果是”有用户登录过程“,则是/etc/profile文件中umask生效。

PATH变量:会给PATH变量追加值,当然也是在”没有登录过程“时才生效。

调用/etc/profile.d/*.sh文件,这也是在”没有登录过程“时才调用。在”有用户登录过程“时,/etc/profile.d/*.sh文件已经被/etc/profile文件调用过了。

这样这五个环境变量配置文件会被依次调用,如果你修改后打算对所有用户生效,那么可以放入/etc/profile环境变量配置文件。

1)可是如果我们误删除了这些环境变量,比如删除了/etc/bashrc文件,或删除了~/.bashrc文件,那么这些文件中配置就会失效(~/.bashrc文件会调用/etc/bashrc文件)

那么命令是提示符会变成:

-bash-4.1#

~/.bash_logout:

2)注销时生效的环境变量配置文件

在用户退出登录时,只会调用一个环境变量配置文件,~/.bash_logout文件。默认没有

写入任何内容,可是如果我们希望在退出登录时执行一些操作,比如备份或删除历史命令

(rm -rf /root/.bash_history),就可以把命令写入这个文件。

3.其他配置文件

还有一些环境配置文件,最常见的就是~/bash_history文件,也就是历史命令保存文 件。这个文件在之前的课程中已经讲过了,这里只是把他列入环境变量配置文件中。3

shell登录信息

1)/etc/issue

我们在登录tty1-tty6这六个本地终端时,会有几行欢迎信息。这些欢迎信息就是保存在/etc/issue文件中的,我们可以对这个文件进行查看:

【】# cat /etc/issue

CentOS release 6.5 (Final)

Kernel \r on an \m

可以支持的转义符我们可以通过man agetty命令查询,在表中我们列出常见的转义符作

用:

转义符

作用

\d

显示当前系统日期

\s

显示操作系统名称

\l

显示登陆终端号(常用)

\m

显示硬件体系结果,如:i386,i686等

\n

显示主机名

\o

显示域名

\r

显示内核版本

\t

显示当前系统时间

\u

显示当前登陆用户的序列号

2)/etc/issue.net

        /etc/issue是在本地终端登录是显示欢迎信息的,如果远程登录(如ssh远程登录,或

telnet远程登录)需要显示欢迎信息(警告信息),则需要配置/etc/issue.net这个文件

了。使用这个文件时有以下两点需要注意:

        首先,在/etc/issue这个文件中支持的转义符,在/etc/issue.net文件中不能使用。

其次,ssh远程登录是否显示/etc/issue.net文件中的欢迎信息,是由ssh的配置文件决定

的。

        如果我们需要ssh远程登录可以查看/etc/issue.net的欢迎信息,那么首先需要修改ssh的配

置文件/etc/ssh/sshd_config加入以下内容:

【】# cat /etc/ssh/sshd_config | grep Banner

#Banner none

Banner /etc/issue.net

(在#Banner none后加入上述内容。这样在ssh远程登录的时候,也可以显示欢迎信息,只是不再可以识别\d和\l等信息了。(注意需要重启service shhd restart)

3)/etc/motd

/etc/motd文件中也是显示欢迎信息的,这个文件和/etc/issue及/etc/issue.net文件的区

别是:/etc/issue及/etc/issue.net是在用户登录之前显示欢迎信息,而/etc/motd是在用户输入用户输入用户名和密码正确登录之后显示欢迎信息。在/etc/motd文件中的欢迎信息,无论是本地登录,还是远程登录都可以显示。

4)定义Bash快捷键

【】# stty -a

#查询所有快捷键

speed 38400 baud; rows 22; columns 73; line = 0;

intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;

..........

定义ctrl+p快捷键为强制终止,^字符只要手工输入即可。

【】# stty intr ^p

【】# ^P

【】# ^P

【】# stty -a

speed 38400 baud; rows 22; columns 73; line = 0;

intr = ^P; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;

............

(强制终止变成了ctrl+p)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值