Bash最基本的语法
循环和条件判断—Bash
Vim快捷键
运算符----Bash
数组----Bash
字符串—Bash
变量----Bash
变量
怎么定义变量?
- 定义变量,不需要加
$
,引用需要。且变量名与等号之间不允许有空格
只读变量 readonly
readonly
命令可以将变量变为可以读的,但是不允许改变
#!/bin/bash
myUr1="xxxx.com"
readonly myUr1
myUr1="yyyy.com" #ERROR 不被允许,因为myUr1只有可读的权限
#删除变量
#使用unset可以删除变量
unset myUr1 #被删除的变量,就是真的没有了,不能再引用使用了。注意:readonly不可删除,没有权限
readonly
有三个参数
- 声明的变量为函数名
-f
- 打印出所有的只读变量
-p
- 声明的变量为数组
-a
变量类型
-
局部变量
-
环境变量 是
Bash
环境自带的变量,进入Shell
已经定义好了呢!$ env #OR $printenv #显示所有的环境变量
现在列举一些常见的环境变量
Bash
进程的进程ID
---->BASHPID
- 用户的主目录 ---->
HOME
- 字符集以及语言编码,比如
zh_CN.utf-8
---->LANG
- 返回一个
0
到32767
之间的一个随机数 ---->RANDOM
UID
USER
- 由冒号分开的目录列表,当输入可执行程序名后,会搜索这个目录的列表 ----
PATH
-
shell变量
输出变量,export
命令
用户创建的变量只能作用于当前的Shell
,并不能读取父Shell
定义的变量。这个时候我们将变量通过export
输出,那么这个变量对于子Shell
相当于环境变量
NAME=foo #定义变量
export NAME #输出变量
export NAME=value #输出和赋值同时完成
#上面命令执行后,当前 Shell 及随后新建的子 Shell,都可以读取变量$NAME
特殊变量
有特殊使命的变量,用户不能赋值
-
$?
上一个命令的退出码,用来判断上一个命令是否执行成功。返回0
执行成功,返回非0
,执行失败。$ ls fjsdk;'fk' ls: fjsdk;'fk': NO such file or directory $ echo $? 1
-
$$
当前shell
的进程这个可以作为临时文件
LOGFILE=/tmp/output_log.$$
-
$_
上一个命令的最后一个参数 -
$0
当前shell
的名称或者脚本名 -
$@
和$#
表示脚本的参数数量 -
$!
最近一个后台执行的异步命令的进程id
变量的默认值
其实这个和特殊变量的作用是相似的。比如$$
返回的是进程的ID,它是有返回值的,如果没有会提示错误。但是变量的默认值不一样,如果条件为真,会返回,条件为假,会返回指定返回的内容。
-
{varname:-word}
如果变量
(varname)
存在且不为空,返回变量的值。否则,返回word
。具体{count:-1}
,如果count
不存在返回1。 -
{varname:+word}
如果变量
(varname)
存在且不为空,返回变量的值。否则,返回空 -
{varname:=word}
如果变量
(varname)
存在且不为空,返回变量的值。否则,对变量(varname)
赋值为word
-
{varname:?message}
如果变量
(varname)
存在且不为空,返回变量的值。否则打印varname: message
。比如
${count:?"undefined!"}
表示变量count
未定义时就中断执行,抛出错误,返回给定的报错信息undefined!
。上面四种语法如果用在脚本中,变量名的部分可以用到数字
1
到9
,表示脚本的参数。filename=${1:?"filename missing."}
上面代码出现在脚本中,
1
表示脚本的第一个参数。如果该参数不存在,就退出脚本并报错。
declare
命令 ----- 可用于查找
declare
命令的主要参数(OPTION)如下。
-a
:声明数组变量。-f
:输出所有函数定义。-F
:输出所有函数名。-i
:声明整数变量。-l
:声明变量为小写字母。-p
:查看变量信息。-r
:声明只读变量。-u
:声明变量为大写字母。-x
:该变量输出为环境变量。
declare
命令如果用在函数中,声明的变量只在函数内部有效,等同于local
命令。
不带任何参数时,declare
命令输出当前环境的所有变量,包括函数在内,等同于不带有任何参数的set
命令。
$ declare
let
命令
它支持算数,会在算数的时候详细记录学习。