构建基础脚本
创建shell脚本时,必须在文件第一行指定要使用的shell,其格式为:
#!/bin/bash
环境变量
例:
#!/bin/bash
#display user information from the system
echo "User info for userid: $USER"
echo UID: $UID
echo HOME: $HOME
用户变量
用户变量可以是任何由字母、数字或下划线组成的文本字符串,长度不超过20个。用户变量区分大小写
例:
#!/bin/bash
#testing variales
days=10
guest="Katie"
echo "$guest checked in $days days ago"
days=5
guest="Jessica"
echo "$guest checked in $days days ago"
引用一个变量时需要使用美元符,赋值时不需要使用美元符
例:
#!/bin/bash
#assigning a variable value to another variable
value1=10
value2=$value1
echo The resulting value is $value2
命令替换
利用反引号`或$()把整个命令围起来
例:
#!/bin/bash
testing=$(date)
#testing=`date`
echo "The date and time are: " $testing
例:
#!/bin/bash
#copy the /usr/bin directory listing to a log file
today=$(date +%y%m%d)
ls /usr/bin -al > log.$today
执行数学运算
expr命令
操作符 | 描述 |
---|---|
ARG1 | ARG2 | 如果ARG1既不是null也不是零值,返回ARG1;否则返回ARG2 |
ARG1 & ARG2 | 如果没有参数是null或零值,返回ARG1;否则返回0 |
ARG1 < ARG2 | 如果ARG1小于ARG2,返回1,否则返回0 |
ARG1 <= ARG2 | 如果ARG1小于或等于ARG2,返回1,否则返回0 |
ARG1 = ARG2 | 如果ARG1等于ARG2,返回1,否则返回0 |
ARG1 != ARG2 | 如果ARG1不等于ARG2,返回1;否则返回0 |
ARG1 >= ARG2 | 如果ARG1大于等于ARG2,返回1;否则返回0 |
ARG1 > ARG2 | 如果ARG1大于ARG2,返回1;否则返回0 |
ARG1 + ARG2 | 返回ARG1和ARG2的算术运算和 |
ARG1 - ARG2 | 返回ARG1和ARG2的算术运算差 |
ARG1 * ARG2 | 返回ARG1和ARG2的算术乘积 |
ARG1 / ARG2 | 返回ARG1被ARG2除的算术商 |
ARG1 % ARG2 | 返回ARG1被ARG2除的算术余数 |
例:
#!/bin/bash
#An example of using the expr command
var1=10
var2=20
var3=$(expr $var2 / $var1)
echo The result is $var3
使用方括号
在bash中,在将一个数学运算结果符给某个变量时,可以用美元符和方括号$[ operation ]将数学表达式围起来
例:
#!/bin/bash
var1=100
var2=50
var3=45
var4=$[$var1*($var2-$var3)]
echo The final result is $var4
bash shell数学运算符只支持整数运算
例:
#!/bin/bash
var1=100
var2=45
var3=$[$var1/$var2]
echo The final result is $var3
浮点解决方案
bc bash计算器
例:
varriable=$(echo "options;expression" | bc)
scale为保留n位小数
例:
#!/bin/bash
var1=$(echo "scale=4;3.44/5"|bc)
echo The answer is $var1
例:
#!/bin/bash
var1=100
var2=45
var3=$(echo "scale=4;$var1/$var2"|bc)
echo The answer for this is $var3
例:
#!/bin/bash
var1=20
var2=3.14159
var3=$(echo "scale=4;$var1*$var1"|bc)
var4=$(echo "scale=4;$var3*$var2"|bc)
echo The final result is $var4
上述方法可以解决较短的运算,较长的运算可以以如下方法解决:
variable=$(bc<<EOF
options
statements
expressions
EOF
)
EOF文本字符串标识了内联重定向数据的起止
例:
#!/bin/bash
var1=10.46
var2=43.67
var3=33.2
var4=71
var5=$(bc<<EOF
scale=4
a1=($var1*$var2)
b1=($var3*$var4)
a1+b1
EOF
)
echo The final answer for this mess is $var5
退出脚本
一个成功结束的命令的退出状态码是0,如果一个命令结束时有错误,退出状态码就是一个正数
LINUX退出状态码
状态码 | 描述 |
---|---|
0 | 命令成功结束 |
1 | 一般性未知错误 |
2 | 不适合的shell命令 |
126 | 命令不可执行 |
127 | 没找到命令 |
128 | 无效的退出参数 |
128+x | 与linux信号x相关的严重错误 |
130 | 通过ctrl+c终止的命令 |
255 | 正常范围之外的退出状态码 |
返回指定的退出码
例:
#!/bin/bash
#testing the exit status
var1=10
var2=30
var3=$[$var1+$var2]
echo The answer is $var3
exit 5
exit返回命令的参数中使用变量
例:
#!/bin/bash
var1=10
var2=30
var3=$[$var1+$var2]
exit $var3
最大返回值只能是255,如果超过0-255范围会得到模运算结果
例:
#!/bin/bash
var1=10
var2=30
var3=$[$var1*$var2]
exit $var3