# Shell脚本
怎么创建脚本--> *.sh
怎么执行脚本?有几种方式
1. 绝对路径 --> 从根目录 /
2. bash 脚本名称 | sh 脚本名称
用户自定义变量
定义变量:变量名=变量值 'hello world'
使用变量:${变量名}
系统内置变量($)
$# : 获取参数个数
$*/$@ : 获取参数列表
$n : n是数字,表示获取第n个参数
$? : 获取上一个命令执行的结果
$PATH: 环境变量路径 /usr/bin
$HOME: 获取家目录 /root /home/用户名
数值计算:
如果要做算术运算,则需要使用$(( 计算式 )) $[ 计算式 ]
判断式:
语法:test 表达式
数值(比较运算符):-eq -ne -lt -gt -le -ge
字符串:== != -z -n
文件:-f -d -e -w -r -x
多重判断:
-a : 并且 and
-o : 或者 or
! : 取反 not
判断一个目录是否存在,如果存在,则判断是否为文件
dir='/usr/local/src/aa'
test -e dir -a -f dir
第二种判断式写法:[ 表达式 ]
(( ))
if语法:
if [判断式]
then
语句块
fi
if ((判断式)); then
语句块
elif ((判断式)); then
语句块
else
语句块
fi
# 请输入一个y/n,根据输入值判断是否继续或退出。
read -p "请输入一个数值:" num / $n 获取第n个参数
read -p "请输入一个y/n" arg
if [[ $arg == 'y' ]]; then
echo "继续"
elif [[ $arg == 'n' ]]; then
echo "退出"
else
echo "输入有误"
fi
# 输入一个年份,判断是否为闰年 逻辑判断符号: && || !
# 闰年:能被4整除且不能被100整除,或者能直接被400整除
2000 2004 2008
read -p "请输入一个年份:" year
if (( ($year % 4 == 0 && $year % 100 != 0) || $year % 400 == 0 )); then
echo "闰年"
else
echo "平年"
fi
# 使用while循环完成1...10的打印
i=1
while (( i <= 10 )) ; do
echo $i
i=$((i + 1)) # $(()) 只能做计算,不能做赋值
done
# 求偶数和
i=1
total=0
while (( i <= 10 )) ; do
if (( i % 2 == 0 ));then
total=$(( total + i ))
fi
i=$((i + 1))
done
echo $total
# 死循环
while (( 1 == 1 )) ; do
read -p "请输入一个数值:" num
if [[ $num == 'x' ]];then
break
fi
done
# for 循环
for 变量名 in 空格分割的列表 ; do
done
# 使用for循环输出1..5
for num in 1 2 3 4 5 ; do
echo $num
done
for num in 1 2 3 4 5 ; do echo $num ; done
for str in a b c d e ; do echo $str ;done
# 写一个脚本,用于数值动态求和,求和数值个数不固定
sum.sh 1 2 3 4 参数不固定
for $*/$@ while $# $n
sum=0
for num in $* ; do
sum=$(( num + sum ))
done
echo $sum
#####################################################
i=1
while (( i <= $# ));do
num=$i
sum=$(( num + sum ))
i=$(( i + 1 ))
done
echo $sum
#####################################################
for (( 初始值; 结束条件; 迭代器)); do
done
for (( i=0;i<=10;i++)); do echo $i; done
for i in seq ; do
done
seq n # 从1开始到指定n结束
seq n m # 从n开始到指定m结束
seq n s m # 从n开始到指定m结束,中间间隔 s 如果s为-1则表示倒序
如果在脚本中要执行命令,并获取命令执行后的结果,则需要使用`` 或者 $() 包裹