Linux -shell 基础
Linux -shell 基础
Shell编程基本知识回顾,方便之后的复习回顾。
目录
一、Shell概述
1、什么是shell
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。
2、shell的分类
Shell 的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。
Bourne主要包括sh、ksh、Bash、psh、zsh
C主要包括:csh、tcsh(Bash和zsh在不同程度上支持csh的语法)。
3、Linux支持的Shell
可以通过/etc/shells文件来查询Linux支持的Shell。命令如下:
[aaa@qq.com ~]# vi /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
二、Shell脚本的执行方式
1、echo命令
[aaa@qq.com ~]# echo [选项] [输出内容]
选项:
-e:支持反斜线控制的字符转换
-n:取消输出后行末的换行符号(即内容输出后不换行)
例如:
[aaa@qq.com ~]# echo -e "a\tb\tc"
a b c
[aaa@qq.com ~]# echo -n "abc"
abc[aaa@qq.com ~]#
在echo命令中如果使用了”-e"选项,则可以支持控制字符
控制字符 | 作用 |
---|---|
\\ | 输出\本身 |
\a | 输出警告声 |
\b | 退格键,也就是向左删除键 |
\c | 取消输出行末的换行符。和“-n"选项一致 |
\e | ESCAPE键 |
\f | 换页符 |
\n | 换行符 |
\r | 回车键 |
\t | 制表符,也就是Tab键 |
\v | 垂直制表符 |
\0nnn | 按照八进制ASCII码表输出字符。其中0为数字零,nnn是三位八进制数 |
\xhh | 按照十六进制ASCII码表输出字符。其中hh是两位十六进制数 |
[aaa@qq.com ~]# echo -e "\\"
\
[aaa@qq.com ~]# echo -e "a\tb\tc\t"
a b c
[aaa@qq.com ~]# echo -e "\x61\t\x62\t\x63"
a b c
#按照十六进制ASCII码输出
[aaa@qq.com ~]# echo -e "\e[1;31m ab \e[0m"
ab
#把ab按照红色输出。解释下这个命令\e[1是标准格式,代表颜色输出开始,、e[0m代表颜色输出结束,31m定义字体颜色是红色。
[aaa@qq.com ~]# echo -e "\e[1;43m ab \e[0m"
ab
#给ab加背景颜色
2、Shell脚本的执行
[aaa@qq.com ~]# vi hello.sh
#!/bin/bash
echo -e "helloworld! "
Shell脚本写好后的运行方式
- 赋予执行权限,直接运行
[aaa@qq.com ~]# chmod 755 hello.sh
#赋予执行权限
[aaa@qq.com ~]# ./hello.sh
helloworld!
#使用相对路径运行
[aaa@qq.com ~]# /root/hello.sh
helloworld!
#使用绝对路径运行
- 通过Bash调用执行脚本
[aaa@qq.com ~]# bash hello.sh
helloworld!
三、Bash的基本功能
3.1历史命令与命令补全
1、历史命令
1)历史命令的查看
[aaa@qq.com ~]# history [选项] [历史命令保存文件]
选项:
-c: 清空历史命令
-w: 把缓存中的历史命令写入历史命令保存文件。
如果不手工指定历史命令保存文件,则放入默认历史保存文件 ~/.bash_history中
2)历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改
3)历史命令的调用
- 使用上、下箭头调用以前的历史命令
- 使用“!n”重复执行第n条历史命令
- 使用“!!”重复执行上一条命令
- 使用“!字串”重复执行最后一条以该字串开头的命令
2、命令与文件补全
在Bash中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件时,按“Tab”键就会自动进行补全
3.2命令别名与常用快捷键
1、命令别名
[aaa@qq.com ~]# alias 别名=‘原命令’
#设定命令别名
[aaa@qq.com ~]# alias
#查询命令别名
1)命令执行时顺序
1、 第一顺位执行用绝对路径或相对路径执行的命令。
2、 第二顺位执行别名。
3、 第三顺位执行Bash的内部命令。
4 、第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令。
2)让别名永久生效
[aaa@qq.com ~]# vi /root/.bashrc
3)删除别名
[aaa@qq.com ~]# unalias 别名
2、Bash常用快捷键
快捷键 | 作 用 |
---|---|
ctrl+A | 把光标移动到命令行开头。如果我们输入的命令过长,想要把光标移动到命令行开头时使用。 |
ctrl+E | 把光标移动到命令行结尾。 |
ctrl+C | 强制终止当前的命令。 |
ctrl+L | 清屏,相当于clear命令。 |
ctrl+U | 删除或剪切光标之前的命令。我输入了一行很长的命令,不用使用退格键一个一个字符的删除,使用这个快捷键会更加方便 |
ctrl+K | 删除或剪切光标之后的内容。 |
ctrl+Y | 粘贴ctrl+U或ctrl+K剪切的内容。 |
ctrl+R | 在历史命令中搜索,按下ctrl+R之后,就会出现搜索界面,只要输入搜索内容,就会从历史命令中搜索。 |
ctrl+D | 退出当前终端。 |
ctrl+Z | 暂停,并放入后台。这个快捷键牵扯工作管理的内容,我们在系统管理章节详细介绍。 |
ctrl+S | 暂停屏幕输出。 |
ctrl+Q | 恢复屏幕输出。 |
3.3输入输出重定向
1、标准输入输出
设备 | 设备文件名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/sdtout | 1 | 标准输出 |
显示器 | /dev/sdterr | 2 | 标准输入输出 |
2、输出重定向(重点)
类型 | 符号 | 作用 |
---|---|---|
标准输出重定向 | 命令 > 文件 | 以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中。 |
命令 >> 文件 | 以追加的方式,把命令的正确输出输出到指定的文件或设备当中。 | |
标准错误输出重定向 | 错误命令 2>文件 | 以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中。 |
错误命令 2>>文件 | 以追加的方式,把命令的错误输出输出到指定的文件或设备当中。 | |
正确输出和错误输出同时保存 | 命令 > 文件 2>&1 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。 |
命令 >> 文件 2>&1 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。 | |
命令 &>文件 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。 | |
命令 &>>文件 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。 | |
命令>>文件1 2>>文件2 | 把正确的输出追加到文件1中,把错误的输出追加到文件2中。 |
3、输入重定向
[aaa@qq.com ~]# wc [选项] [文件名]
选项:
-c 统计字节数
-w 统计单词数
-l 统计行数
- 命令<文件 把文件作为命令的输入
- 命令<< 标识符 … 标识符 把标识符之间内容作为 命令的输入
3.4多命令顺序执行与管道符
1、多命令顺序执行
多命令执行符 | 格式 | 作用 |
---|---|---|
; | 命令1;命令2 | 多个命令顺序执行,命令之间没有任何逻辑联系 |
&& | 命令1&&命令2 | 逻辑与 当命令1正确执行,则命令2才会执行 当命令1执行不正确,则命令2不会执行 |
|| | 命令1||命令2 | 逻辑或 当命令1 执行不正确,则命令2才会执行 当命令1正确执行,则命令2不会执行 |
例子:
[aaa@qq.com ~]# ls ; date ; cd /user ; pwd
[aaa@qq.com ~]# dd if=输入文件 of=输出文件 bs=字节数 count=个数
选项:
if=输入文件 指定源文件或源设备
of=输出文件 指定目标文件或目标设备
bs=字节数 指定一次输入/输出多少字节,即把这些字节看做 一个数据块
count=个数 指定输入/输出多少个数据块
例子:
[aaa@qq.com ~]# date ; dd if=/dev/zero of=/root/testfile bs=1k count=100000 ; date
[aaa@qq.com ~]# ls anaconda-ks.cfg && echo yes
[aaa@qq.com ~]# ls /root/test || echo "no
[aaa@qq.com ~]# 命令 && echo yes || echo no
2、管道符
命令格式:
[aaa@qq.com ~]# 命令1 | 命令2
#命令1的正确输出作为命令2的操作对象
颜色显示
例子:
[aaa@qq.com ~]# ll -a /etc/ | more
[aaa@qq.com ~]# netstat -an | grep “ESTABLISHED”
[aaa@qq.com ~]# grep [选项] “搜索内容” 文件名
选项:
-i: 忽略大小写
-n: 输出行号
-v: 反向查找
–color=auto 搜索出的关键字用颜色显示
3.5通配符与其他特殊符号
1、通配符
通配符 | 作用 |
---|---|
? | 匹配一个任意字符 |
* | 匹配0个或任意多个任意字符,也就是可以匹配任何内容 |
[] | 匹配中括号中任意一个字符。例如如:[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c。 |
[-] | 匹配中括号中任意一个字符,-代表一个范围。例如:[a-z]代表匹配一个小写字母。 |
[^] | 逻辑非,表示匹配不是中括号内的一个字符。例如:[^0-9]代表匹配一个不是数字的字符。 |
[aaa@qq.com ~]# cd /tmp/
[aaa@qq.com tmp]# rm -rf *
[aaa@qq.com tmp]# touch abc
[aaa@qq.com tmp]# touch abcd
[aaa@qq.com tmp]# touch 012
[aaa@qq.com tmp]# touch 0abc
[aaa@qq.com tmp]# ls ?abc
[aaa@qq.com tmp]# ls [0-9]*
[aaa@qq.com tmp]# ls [^0-9]*
2、Bash中其他特殊符号
符 号 | 作 用 |
---|---|
‘’ | 单引号。在单引号中所有的特殊符号,如“$”和“`”(反引号)都没有特殊含义。 |
“” | 双引号。在双引号中特殊符号都没有特殊含义,但是“$”、“`”和“\”是例外,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义。 |
`` | 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和$()作用一样,不过推荐使用$(),因为反引号非常容易看错。 |
$() | 和反引号作用一样,用来引用系统命令。 |
# | 在Shell脚本中,#开头的行代表注释。 |
$ | 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值。 |
\ | 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如$将输出“$”符号,而不当做是变量引用。 |
反引号与$()
[aaa@qq.com ~]# echo `ls`
[aaa@qq.com ~]# echo $(date)
单引号与双引号
[aaa@qq.com ~]# name=sc
[aaa@qq.com ~]# echo ‘$name’
[aaa@qq.com ~]# echo “$name”
[aaa@qq.com ~]# echo ‘$(date)’
[aaa@qq.com ~]# echo “$(date)”
四、Bash的变量
4.1、用户自定义变量
1、什么是变量
变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息时,如一个文件名或是一个数字,就把它存放在一个变量中。每个变量有一个名字,所有很容易引用它。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息。
2、变量设置规则
-
变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名使“2name"则使错误的。
-
在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必修指定变量类型为数字型。
-
变量用等号连接值,等号左右两侧不能由空格。
-
变量的值如果由空格,需要使用单引号或双引号包括。
-
在变量的值中,可以使用”\"转义符。
-
如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含”$变量名“或用${变量名}包含。
-
如果使把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令。
-
环境变量名建议大写,便于区分。
3、变量分类
用户自定义变量
环境变量:这种变量中主要保存的是和系统操作环境相关的数据。
位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
4、本地变量
变量定义
name=“xiao ming”
变量叠加
a=1
a="$a"2
a=${a}3
[aaa@qq.com ~]# a=1
[aaa@qq.com ~]# echo $a
1
[aaa@qq.com ~]# a="$a"2
[aaa@qq.com ~]# echo $a
12
[aaa@qq.com ~]# a=${a}3
[aaa@qq.com ~]# echo $a
123
变量调用
echo $a
变量查看
set
变量删除
unset a
4.2、环境变量
1、环境变量是什么
用户自定义变量只在当前的Shell中生效,而环境变量会在当前Shell和这个Shell的所有子Shell当中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的Shell中生效。
2、设置环境变量
export 变量名=变量值
#声明变量
env
#查询变量
unset 变量名
#删除变量
3、系统常见环境变量
-
PATH:系统查找命令的路径
[aaa@qq.com ~]# echo $PATH /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/sh
-
PATH="$PATH":/root/sh
#PATH变量叠加
-
PS1:定义系统提示符的变量
\d:显示日期,格式为”星期 月 日“
\h:显示简写主机名。如默认主机名”localhost"
\t:显示24小时制时间,格式为’HH:MM:SS’
\T:显示12小时制时间,格式为“HH:MM:SS”
\A:显示24小时制时间,格式为"HH:MM"
\u:显示当前用户名
\w:显示当前所在目录的完整名称
\W:显示当前所在目录的最后一个目录
\#:执行的第几个命令
\$:提示符。如果是root用户会显示提示符为“#”,如果是普通用户则会显示提示符为“$"
[aaa@qq.com ~]# echo $PS1 [\aaa@qq.com\h \W]\$
4.3、位置参数变量
位置参数变量 | 作用 |
---|---|
$n | n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上得参数需要用大括号包含,${10} |
$* | $*这个变量代表命令行中所有的参数,$*把所有参数看成一个整体 |
aaa@qq.com | aaa@qq.com这个变量也代表命令行中的所有参数,不过aaa@qq.com把每个参数区分对待 |
$# | $#这个变量代表命令行中所有参数的个数 |
#!/bin/bash
#$1,$2..$9,${10}代表第n个参数,十以上需要用大括号包含,$0代表命令本身
num1=$1
num2=$2
num3=$(($num1+$num2))
echo $num3
echo $0
#$*这个变量代表命令行中所有的参数,$*把所有参数看成一个整体
#for i in "$*"
# do
# echo $i
# done
#echo "===================="
#aaa@qq.com这个变量也代表命令行中的所有参数,不过aaa@qq.com把每个参数区分对待
#for y in "aaa@qq.com"
# do
# echo $y
# done
#$#这个变量代表命令行中所有参数的个数
#echo "=============="
#echo $#
$* 与aaa@qq.com的区别
[aaa@qq.com sh]# vim para.sh
#!/bin/bash
for i in "$*"
do
echo "The parameter is $i"
done
echo "--------"
x=1
for y in "aaa@qq.com"
do
echo "The parameter $x is: $y"
x=$(($x+1))
done
[aaa@qq.com sh]# chmod 755 ./para.sh
[aaa@qq.com sh]# ./para.sh 1 2 3
The parameter is 1 2 3
----
The parameter 1 is : 1
The parameter 2 is : 2
The parameter 3 is : 3
4.4、预定义变量
1、预定义变量
预定义变量 | 作用 |
---|---|
$? | 最后以此执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
#!/bin/bash
#Author;nede
echo "The current process is $$"
#输出当前进程的PID
#这个PID就是jc.sh这个脚本执行时,生成的进程的PID
find /root -name hello.sh &
#使用find命令在root目录下查找hello.sh文件
#符号&的意思是把命令放入后台执行
echo "The last one Daemon process is $!"
[aaa@qq.com sh]# ./jc.sh
The current process is 1868
The last one Daemon process is 1869
[aaa@qq.com sh]# /root/sh/hello.sh
2、接收键盘输入
[aaa@qq.com ~]# read [选项] [变量名]
选项:
-p “提示信息” :在等待read输入时,输出提示信息
-t 秒数: read 命令会一直等待用户输入,使用在此选项可以指定等待时间
-n字符数: read命令只接受指定的字符数,就会执行
-s: 隐藏输入的数据,适用于机密信息的输入
#!/bin/bash
#Author:MR.lu
read -t 30 -p "Please input your name: " name
#提示“请输入姓名”并等待30秒,把用户的输入保存入变量name中
echo "Name is $name"
read -s -t 30 -p "Please input your age: " age
#年龄是隐私,所以我们用"-s"选项隐藏输入
echo -e "\n"
echo "Age is $age"
read -n 1 -t 30 -p "Please input you gender[M/F]: " gender
#使用"-n 1"选项只接收一个输入字符就会执行(都不用输入回车)
echo -e "\n"
echo "Sex is $gender"
五、Bash的运算符
5.1数值运算与运算符
-
使用declare声明变量类型
既然所有变量的默认类型是字符串型,那么只要我们把变量声明为整型就可以运算了。
使用declare命令就可以实现声明变量的类型。命令如下:
[aaa@qq.com ~]# declare [+-][选项] 变量名
选项:
-: 给变量设定类型属性
+: 取消变量的类型属性
-a: 将变量声明为数组型
-i: 将变量声明为整数型(interger)
-r: 将变量声明为只读变量。注意,一旦设置为只读变量,既不能修改变量的值,
也不能删除变量,甚至不能通过+r取消只读属性
-x: 将变量声明为环境变量
-p: 显示指定变量的被声明的类型
例一:数值运算
只要把变量声明为整型就可以运算
[aaa@qq.com sh]# a=1
[aaa@qq.com sh]# b=2
#给变量a和b赋值
[aaa@qq.com sh]# declare -i c=$a+$b
#声明变量c的类型是整数型,他的值是a与b的值
[aaa@qq.com sh]# echo $c
3
例二:数组变量类型
所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标,组成数组的各个变量成为数组的分量,也称为数组的元素,有时也称为下标变量。数组是可以赋予一组相同类型的数据值。
[aaa@qq.com sh]# name[0]="xiaoming"
#数组中的第一个变量是小明
[aaa@qq.com sh]# name[1]="xiaohong"
#数组中的第二个变量是小红
[aaa@qq.com sh]# name[2]="xiaolv"
#数组中的第三个变量是小绿
[aaa@qq.com sh]# echo ${name}
xiaoming
#输出数组的内容,如果只写数组名,那么只会输出第一个下标变量
[aaa@qq.com sh]# echo ${name[*]}
xiaoming xiaohong xiaolv
#输出数组所有内容
[aaa@qq.com sh]# echo ${name[1]}
xiaohong
[aaa@qq.com sh]# echo ${name[2]}
xiaolv
注意数组的下标是从0开始的,在调用数组值时,需要使用${数组[下标]}的方式来读取。
只要我们在定义变量时采用了“变量名[下标]”的格式,这个变量就会被系统认为时数组型了,不用强制声明。
例三:环境变量
我们其实也可以使用declare命令把变量声明为环境变量,和export命令的作用是一样的:
[aaa@qq.com sh]# declare -x test="123"
#把变量test声明为环境变量
例四:只读属性
注意一旦给变量设定了只读属性,那么既不能修改变量的值,也不能删除变量,甚至不能使用“+r"选项取消只读属性。不过,这个变量只是命令行声明的,所以只要重新登录或重启,这个变量就会消失了。命令如下:
[aaa@qq.com sh]# declare -r test=12
#给test赋予只读属性
[aaa@qq.com sh]# echo $test
12
[aaa@qq.com sh]# test=11
-bash: test: readonly variable
#test变量的值不能修改
[aaa@qq.com sh]# unset test
-bash: unset: test: cannot unset: readonly variable
#也不能删除变量
[aaa@qq.com sh]# declare +r test
-bash: declare: test: readonly variable
#不能取消只读属性
[aaa@qq.com sh]# declare -p test
declare -r test="12"
例五:查询变量属性和取消变量属性
变量属性的查询使用”-p"选项,变量属性的取消使用“+”选项。命令如下:
[aaa@qq.com sh]# declare -p test
declare -r test="12"
#test变量是只读变量
[aaa@qq.com sh]# declare -p c
declare -i c="3"
#c变量是整型
[aaa@qq.com sh]# declare +i c
#取消c变量的整型属性
注意只读变量的属性是不能取消的
-
数值运算
-
方法1
[aaa@qq.com ~]# aa=11
[aaa@qq.com ~]# bb=22
#给变量aa和bb赋值
[aaa@qq.com ~]# declare -i cc=bb -
方法2:expr或let数值运算工具
[aaa@qq.com ~]# aa=11
[aaa@qq.com ~]# bb=22
#给变量aa和变量bb赋值
[aaa@qq.com ~]# dd=$(expr $aa + $bb)
#dd的值是aa和bb的和。注意“+”号左右两侧必须有空格 -
方法3:“[运算式]”
[aaa@qq.com ~]# aa=11
[aaa@qq.com ~]# bb=22
[aaa@qq.com ~]# ff=$(( $aa+$bb ))
[aaa@qq.com ~]# gg=$[ $aa+$bb ]
-
3、运算符
优先级 | 运算符 | 说明 |
---|---|---|
13 | -,+ | 单目负,单目正 |
12 | !,~ | 逻辑非、按位取反或补码 |
11 | *,/,% | 乘,除,取模 |
10 | +,- | 加,减 |
9 | <<.>> | 按位左移,按位右移 |
8 | <=,>=,<,> | 小于或等于,大于或等于,小于,大于 |
7 | ==,!= | 等于、不等于 |
6 | & | 按位与 |
5 | ^ | 按位异或 |
4 | | | 按位或 |
3 | && | 逻辑与 |
2 | || | 逻辑或 |
1 | =,+=,-=,*=, =,%=,&=,^=, |=,<<=,>>= |
赋值、运算且赋值 |
aaa@qq.com ~]# aa=$(( (11+3)*3/2 ))
#虽然乘和除的优先级高于加,但是通过小括号可以调整运算优先级
[aaa@qq.com ~]# bb=$(( 14%3 ))
#14不能被3整除,余数是2
[aaa@qq.com ~]# cc=$(( 1 && 0 ))
#逻辑与运算只有想与的两边都是1,与的结果才是1,否则与的结果是0
5.2变量测试与内容替换
变量置换方式 | 变量y没有设置 | 变量y为空值 | 变量y设置值 |
---|---|---|---|
x=${y-新值} | x=新值 | x为空 | x=$y |
x=${y:-新值} | x=新值 | x=新值 | x=$y |
x=${y+新值} | x为空 | x=新值 | x=新值 |
x=${y:+新值} | x为空 | x为空 | x=新值 |
x=${y=新值} | x=新值 y=新值 |
x为空 y值不变 |
x=$y y值不变 |
x=${y:=新值} | x=新值 y=新值 |
x=新值 y=新值 |
x=$y y值不变 |
x=${y?新值} | 新值输出到标准 错误输出(就是屏幕) |
x为空 | x=$y |
x=${y:?新值} | 新值输出到标准 错误输出 |
新值输出到标准 错误输出 |
x=$y |
例子1:测试x=${y-新值
[aaa@qq.com ~]# unset y
#删除变量y
[aaa@qq.com ~]# x=\${y-new}
#进行测试
[aaa@qq.com ~]# echo $x
new
#因为变量y不存在,所以x=new
[aaa@qq.com ~]# y=""
#给变量y赋值为空
[aaa@qq.com ~]# x=${y-new}
#进行测试
[aaa@qq.com ~]# echo $x
[aaa@qq.com ~]# y=old
#给变量y赋值
[aaa@qq.com ~]# x=${y-new}
#进行测试
[aaa@qq.com ~]# echo $x
old
六、环境变量配置文件
6.1 环境变量配置文件简介
1、source命令
[aaa@qq.com ~]# source 配置文件
或
[aaa@qq.com ~]# . 配置文件
2、环境变量配置文件简介
- 环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH、HISTSIZE、PS1、HOSTNAME等默认环境变量。
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc
6.2 环境变量配置文件作用
1、/etc/profile的作用:
USER变量:
LOGNAME变量:
MAIL变量:
PATH变量:
HOSTNAME变量:
HISTSIZE变量:
umask:
调用/etc/profile.d/*.sh文件
2、~/.bash_profile的作用
调用了~/.bashrc文件。
在PATH变量后面加入了“:$HOME/bin”这个目录
3、~/.bashrc
定义默认别名
调用/etc/bashrc
4、/etc/bashrc
PS1变量
umask
PATH变量
调用/etc/profile.d/*.sh文件
6.3 其他配置文件和登录信息
1、注销时生效的环境变量配置文件
~/.bash_logout
2、其他配置文件
~/bash_history
3、Shell登录信息
本地终端欢迎信息: /etc/issue
转义符 | 作用/ |
---|---|
\d | 显示当前系统日期 |
\s | 显示操作系统名称 |
\l | 显示登录的终端号 |
\m | 显示硬件体系结构,如i386,i686等 |
\n | 显示主机名 |
\o | 显示域名 |
\r | 显示内核版本 |
\t | 显示当前系统时间 |
\u | 显示当前登录用户的*** |
远程终端欢迎信息: /etc/issue.net
转义符在/etc/issue.net文件中不能使用
是否显示此欢迎信息,由ssh的配置文件/etc/ssh/sshd_config决定,加入“Banner /etc/issue.net”行才能显示(记得重启SSH服务)
登陆后欢迎信息:/etc/motd 不管是本地登录,还是远程登录,都可以显示此欢迎信息
$HOME/bin”这个目录
3、~/.bashrc
定义默认别名
调用/etc/bashrc
4、/etc/bashrc
PS1变量
umask
PATH变量
调用/etc/profile.d/*.sh文件
上一篇: go语言LeeCode刷题记:3. 无重复字符的最长子串
下一篇: 从矩阵左上角到右下角的最大值