命令
基本命令
$ command [options] [arguments]
#!/bin/bash
echo "hello juejin !"
内建命令
所谓shell内建命令、就是由bash自身提供的命令、而不是文件系统中的某个可执行文件.
例如,用于进入或者切换目录的 cd 命令,虽然我们一直在使用它,但如果不加以注意很难意识到它与普通命令的性质是不一样的:该命令并不是某个外部文件,只要在 Shell 中你就一定可以运行这个命令。
可以使用 type 来确定一个命令是否是内建命令:
type cd
# cd is a shell builtin
type ifconfig
# ifconfig is /sbin/ifconfig
cd是内建命令、ifconfig、不是内建命令
还记得系统变量 $PATH 吗?$PATH 变量包含的目录中几乎聚集了系统中绝大多数的可执行命令,它们都是外部命令。
通常来说,内建命令会比外部命令执行得更快,执行外部命令时不但会触发磁盘 I/O,还需要 fork 出一个单独的进程来执行,执行完成后再退出。而执行内建命令相当于调用当前 Shell 进程的一个函数。
alias
使用 alias 命令自定义别名的语法格式:
alias label='value'
比如,一般的关机命令 shutdown -h now 写起来比较长,这时可以重新定义一个关机命令:
alias sd='shutdown -h now'
再如,通过 date 命令可以获得当前的 UNIX 时间戳,具体写法为 date +%s:
alias timestamp='date +%s'
在代码中使用 alias 命令定义的别名只能在当前 Shell 进程中使用,在子进程和其它进程中都不能使用。当前 Shell 进程结束后,别名也随之消失。
# 如何使用
alias mulu="pwd"
# 执行mulu
mulu
# 输出和直接使用pwd一样的效果
echo
用于在终端输出字符串,并在最后默认加上换行符。
#!/bin/bash
name="tsejx"
url="https://github.com"
# 直接输出字符串
echo "Hello world!"
# 输出变量
echo $url
# 双引号包围的字符串中可以解析变量
echo "${name}的网址是:${url}"
# 单引号包围的字符串不能解析变量
echo '${name}的网址是:${url}'
read
用于标准输入中读取数据并赋值给变量。如果没有进行重定向,默认就是从键盘读取用户输入的数据;如果进行了重定向,那么可以从中读取数据。
read [-options] [variables]
-
options表示选项 -
variables表示用来存储数据的变量、可以只有一个、也可以有多个两个参数都是可选的,如果没有提供变量名,那么读取的数据将存放到环境变量 REPLY 中。 eg
#!/bin/bash
read -p "Enter some information > " name url age
echo "Website:$name"
echo "Url: $url"
echo "Age: $age"
注意,必须在一行内输入所有的值,不能换行,否则只能给第一个变量赋值,后续变量都会赋值失败。
exit
-
退出当前 Shell 进程,并返回一个退出状态;使用$?可以接收这个退出状态
-
exit 命令可以接受一个整数值作为参数,代表退出状态。如果不指定,默认状态值是 0。
-
exit 退出状态只能是一个介于 0~255 之间的整数,其中只有 0 表示成功,其它值都表示失败。
-
Shell 进程执行出错时,可以根据退出状态来判断具体出现了什么错误,比如打开一个文件时,我们可以指定 1 表示文件不存在,2 表示文件没有读取权限,3 表示文件类型不对。
#!/bin/bash
echo "befor exit"
exit 8
echo "after exit"
只会打印出 berfore exit,这说明遇到 exit 命令后,test.sh 执行就结束了。但是会提示 command not found 8 当我们通过$?去访问的时候
let
let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来。
语法
let arg [arg ...]
let sum=10+20
echo $sum
# 30
sum=10+20
echo $sum
# 10+20
# 自增
let num++
# 自减
let num--
# 加等和减等也可以
let num+=10
let num-=10
expr
expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。
语法:
expr 表达式
表达式说明
- 用空格隔开每一项
- 用反斜杠\放在shell特定字符前面
- 对包含空格和其他特殊字符的字符串要用引号括起来
# 计算字串长度
expr length "this is a test"
# 14
# 抓取字符串
expr substr “this is a test” 3 5
# is is 从3开始 截取 5位
# 抓取第一个字符数字串出现的位置
expr index "sarasara" a
# 2
# 整数运算
expr 14 % 9
# 5
expr 10 + 10
# 20
expr 1000 + 900
# 1900
expr 30 / 3 / 2
# 5
expr 30 \* 3 (使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义)
# 90
expr 30 * 3
# Syntax error 乘号需要转译一下
bc
bc 命令是任意精度计算器语言,通常在linux下当计算器用。
- 加法 +
- 减法 -
- 乘法 *
- 除法 /
- 指数 ^
- 取余 %
语法: bc(选项)(参数)
- -i:强制进入交互式模式;
- -l:定义使用的标准数学库
- -v:显示指令版本信息;
- -h:显示指令的帮助信息。
bc
进入到计算模式
quit退出
test
test命令用于检测某个条件是否成立
| 参数 | 说明 |
|---|---|
| -eq | 等于则为真 |
| -ne | 不等于则为真 |
| -gt | 大于则为真 |
| -ge | 大于等于则为真 |
| -lt | 小于则为真 |
| le | 小于等于则为真 |
eg
num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi
输入两个数相等 代码中的 [] 执行基本的算数运算
| 参数 | 说明 |
|---|---|
| = | 等于则为真 |
| != | 不等于则为真 |
| -z 字符串 | 字符串的长度为零则为真 |
| -n 字符串 | 字符串的长度不为零则为真 |
| 文件测试 | |
| -e 文件名 | 如果文件存在则为真 |
| -r 文件名 | 如果文件存在且可读则为真 |
| -w 文件名 | 如果文件存在且可写则为真 |
| -x 文件名 | 如果文件存在且可执行则为真 |
| -s 文件名 | 如果文件存在且至少有一个字符则为真 |
| -d 文件名 | 如果文件存在且为目录则为真 |
| -f 文件名 | 如果文件存在且为普通文件则为真 |
| -c 文件名 | 如果文件存在且为字符型特殊文件则为真 |
| -b 文件名 | 如果文件存在且为块特殊文件则为真 |
逻辑运算
- -a是并且的意思
- -o是或的意思
- !是 取反