赞
踩
目录
如果我们需要进行数值运算,可以采用以下三种方法中的任意一种:
使用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只支持整数计算,也就是所有可能产生小数的运算都会舍去小数部分。例1:加减乘除
【】# aa=$(( (11+3)*3/2 ))
【】# echo $aa
21 #虽然乘除的优先级高于加,但是通过小括号可以调整运算优先级。
变量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。
在不退出登录的情况下,能够让环境变量的修改立即生效。
例如,当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用source命令,如source /etc/profile。
【】# source 环境变量配置文件
【】# . 环境变量配置文件
1)登录时生效的环境变量配置文件
在Linux系统登录时主要生效的环境变量配置文件有以下五个:
注意:在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),就可以把命令写入这个文件。
还有一些环境配置文件,最常见的就是~/bash_history文件,也就是历史命令保存文 件。这个文件在之前的课程中已经讲过了,这里只是把他列入环境变量配置文件中。3
shell登录信息
我们在登录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 | 显示当前登陆用户的序列号 |
/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)
/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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。