运行
方法一:
bash file.sh
source file.sh
方法二:
./file.sh
权限不够(增加可执行权限):
chmod +x file.sh
变量
系统预定义变量
$HOME
$PWD
$SHELL
$USER
...
自定义变量
变量默认为字符串,无法直接数值运算,含空格,括号等需要用 "" ,'' 不会解析里面的特殊符号。
局部变量:
var_name=value # 无空格
echo $var_name
修改为全局变量:
export var_name
撤销变量:
unset var_name
只读变量(不能撤销):
readonly var_name=value
特殊变量
$n:$0表示脚本名称,$1~9表示第一到9个参数,十以上的参数用大括号包含${10}。$#: 获取所有输入参数的个数(脚本名不计入参数)。$*: 表示所有参数,看作一个整体(不含脚本名)。$@: 表示所有参数,每个参数分别对待(不含脚本名)。$?: 返回上一次命令返回状态,0 表示执行正确。
运算符
$((expr)) 和 $[expr] ,中间 expr 需要计算的表达式。
echo 1+2 # 1+2
echo $[1+2] # 3
$(commnad) 利用commad的结果替换。
$(commnad)
条件
test condition 。
通过 $? 捕获结果, 0 为真,其他为假。
test condition
$?
[ condition ] (注意两边要有空格)。
[ condition ]
$?
运算符两边都要有空格。
=: 等于[ $a = $b ]。!=: 不等于[ $a != $b ]。-eq: 等于[ $a -eq $b ]。-ne: 不等于[ $a -ne $b ]。-lt: 小于[ $a -lt $b ]。-gt: 大于[ $a -gt $b ]。-le: 小于等于[ $a -le $b ]。-ge: 大于等于[ $a -ge $b ]。-r: 文件是否可读[ -r file ]。-w: 文件是否可写[ -w file ]。-x: 文件是否可执行[ -x file ]。-e: 文件是否存在[ -e file ]。-f: 文件是否存在且是常规文件[ -f file ]。-d: 文件是否存在且是目录[ -d dir ]。&&逻辑与,||逻辑或。
流程控制
if
单分支:
if [ condition ];then
command
fi
if [ condition ]
then
command
fi
多分支:
if [ condition ]
then
command
elif [ condition ]
then
command
else
command
fi
case
case $var_name in
value1)
command
;;
value2)
command
;;
*)
command
;;
esac
*) 表示 default。
for
语法1:
for ((初始值;条件;变量变化))
do
command
done
输入求和:
sum=0
for ((i=0; i <= $#; i++))
do
sum=$[sum+i]
done
echo $sum
语法2:
for x in list
do
command
done
输入求和:
sum=0
for val in $@
do
sum=$[sum+val]
done
echo $sum
while
while [ condition ]
do
command
done
函数
系统函数
basename: 返回路径最后的文件名。/home/.../file返回file。dirname: 返回路径,/home/.../file返回/home/.../file。
自定义函数
需要先声明函数。
[function] func_name[()] {
code
}
# function 可写可不写
# () 可写可不写
通过 $? 获取返回值。
返回函数内最后一条指令的执行正确性(0~255)。
可以 return。
读取控制台输入
read
-p: 指定读取时的提示符。-t: 指定读取的等待时间 (second),不加无限等待。
read -t 10 -p "input in 10 seconds" args
echo "$args"

Comments NOTHING