shell的简单记录
特殊变量
$n
功能描述:n为数字,$0代表该脚本名称,$1-9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}。
$
功能描述:获取所有输入参数个数,常用于循环
$*
功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@
功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
注意:如果想让$*和$@ 体现区别必须用双引号括起来才生效,如果不加双引号,效果是一样的。
$?
用来判断上一条执行能不能执行成功的,如果可以的话,返回的数组为0,不是0的话,说明上一个失败了。
运算符
$((运算式)) 或者 $[运算式]。一般用后者吧,前者不够优雅。
注意点:>= <= 这两个会报错,我们需要用 以下的判断。
-lt 小于(less than) -le 小于等于(less equal)
-eq 等于(equal) -gt 大于(greater than)
-ge 大于等于(greater equal) -ne 不等于(Not equal)
还有 -f 表示一个已存在的常规文件。-d 表示已存在的目录
流程控制
if 语句
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi
注意点1:要有空格隔开。多个 if 判断用 elif ,有 [ ] 判断的地方要带上 then。最后一个 fi 是结束的标志。如果 else 分支没有语句执行,就不要写这个 else。
case 语句
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esac
case 工作方式如上所示,取值后面必须为单词 in,每一模式必须以右括号结束。取值可以为变量或常数,匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。
取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。
for 语句
#!/bin/bash
for loop in "$@"
do
echo "The value is: $loop"
done
echo "======================"
for loo in "$*"
do
echo "The value is: $loo"
done
上面提到了一个 $@ 和 $* 的区别。要在双引号才可以体验到区别。这里就可以看出来了。如果不带双引号,两者的效果是一样的。
while 语句
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
s=$[$s+$i]
i=$[$i+1]
done
echo $s
控制台读入
read xxx -t 限制时间 -p 控制台的提示语
自定义函数
#!/bin/bash
demoFun(){
echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"
取前一天的时间
#获取时间,如果有时间就指定时间,没有的话,就自动前一天
if [ -n "$1" ];
then do_date=$1
else
do_date=`date -d "-1 day" +%F`
fi
-n 的参数表示 判断 输入的字符串的长度,从而判断有没有输入。
单引号和双引号和反引号的区别
# 在文件中添加如下内容
#!/bin/bash
do_date=$1
echo '$do_date'
echo "$do_date"
echo "'$do_date'"
echo '"$do_date"'
echo `date`
2)查看执行结果
[atguigu@hadoop102 bin]$ test.sh 2019-02-10
$do_date
2019-02-10
'2019-02-10'
"$do_date"
2019年 05月 02日 星期四 21:02:08 CST
(1)单引号不取变量值
(2)双引号取变量值
(3)反引号`,执行引号中命令
(4)双引号内部嵌套单引号,取出变量值
(5)单引号内部嵌套双引号,不取出变量值
单引号可以将它中间的所有任意字符还原为字面意思。
双引号不会屏蔽 反引号,转义字符,美元符这三个字符。
反引号进行命令替换,替换为命令字符的执行结果输出内容。
评论 (0)