Shell脚本¶
1. Shell 简述简介¶
Bash,它是目前大多数GUN/Linux系统默认的shell环境,所以大部分案例和讨论都是假定在此基础之上进行的。
用户分类
- **
$**表示的是普通用户 - **
#**表示管理员用户root
#!
shell脚本通常是以#!/bin/bash/bin/bash表示Bash解释器命令的位置,当然也可以使用其他解释器Linux内核会自动读取首行并注意到#!/bin/bash,运行/bin/bash来执行脚本
运行方式
将脚本作为bash的命令行参数
bash script.sh
相对路径
chmod +x script.sh
./script.sh
chmod +x script.sh
/home/path/script.sh
变量和环境变量¶
进行数学运算¶
在Bash shell环境中,可以使用let、(())、[]执行基本的算术操作,使用expr和bc可以进行高级操作
基本算数¶
let
let result=num1+num2let num++let num--let num+=5let num-=5
$(())
result=$((num1+num2))result=$(($num+5))
$[]
result=$[ num1+num2 ]result=$[ $num+5 ]
高级算数¶
expr
expr 3+4bcresult=$(expr $num+5)
- 普通用法
echo "4 * 0.56" | bc - 设定小数精度
echo "scale=2; 3/8" | bc - 十进制转二进制
echo "obase=2; $num" | bc - 二进制转十进制
echo "obase=10; ibase=2; $num" | bc - 平方根
echo "sqrt(100)" | bc - 计算平方
echo "10^10" | bc
逻辑判断¶
| 逻辑表达式 | 表达式解释说明 |
|---|---|
! |
逻辑非 |
-a |
逻辑且 |
-o |
逻辑或 |
语句判断¶
| 判断语句 | 语句解释说明 |
|---|---|
[-e file] |
如果 file 文件存在则为真 |
[-d file] |
如果 file 存在且是一个目录则为真 |
[-f file] |
如果 file 存在且是一个普通文件则为真 |
[-b file] |
如果 file 存在且是一个块特殊文件则为真 |
[-s file] |
如果 file 存在且大小不为 0 则为真 |
[-c file] |
如果 file 存在且是一个字特殊文件则为真 |
[-h file] |
如果 file 存在且是一个符号连接则为真 |
[-p file] |
如果 file 存在且是一个名字管道则为真 |
[-r file] |
如果 file 存在且是可读的则为真 |
[-w file] |
如果 file 存在且是可写的则为真 |
[-x file] |
如果 file 存在且是可执行的则为真 |
[-L file] |
如果 file 存在且是一个符号连接则为真 |
[-S file] |
如果 file 存在且是一个套接字则为真 |
[-O file] |
如果 file 存在且属有效用户 ID 则为真 |
[-G file] |
如果 file 存在且属有效用户组则为真 |
[-t FD] |
如果文件描述符 FD 打开且指向一个终端则为真 |
[-u file] |
如果 file 存在且设置了 SUID(用 chmod u+s 设置)则为真 |
[-g file] |
如果 file 存在且已经设置了 SGID(用 chmod g+s 设置)则为真 |
[-k file] |
如果 file 存在且已经设置粘制位(用 chmod a+t 设置)则为真 |
条件表达式¶
| 条件表达式 | 表达式解释说明 |
|---|---|
[string] |
string 的长度为非零 non-zero 则为真 |
[-n string] |
string 的长度为非零 non-zero 则为真 |
[-z string] |
string 的长度为零则为真 |
[sting1==string2] |
如果 2 个字符串相同则为真 |
[string1!=string2] |
如果 2 个字符串不相等则为真 |
[string1 –eq string2] |
等于为真 |
[string1 -ne string2] |
不等于为真 |
[string1 -le string2] |
小于为真 |
[string1 –gt string2] |
大于为真 |
[string1 –ge string2] |
大于等于为真 |
[file1 –nt file2] |
如果 file1 比 file2 要新或者 file1 存在且 file2 不存在则为真 |
[file1 –ot file2] |
如果 file1 比 file2 要老或 file2 存在且 file1 不存在则为真 |
[file1 –ef file2] |
如果 file1 和 file2 指向相同的设备和节点号则为真 |