标签搜索

shell的简单记录

海绵
2022-03-15 / 0 评论 / 8 阅读 / 正在检测是否收录...

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)单引号内部嵌套双引号,不取出变量值

单引号可以将它中间的所有任意字符还原为字面意思。

双引号不会屏蔽 反引号,转义字符,美元符这三个字符。

反引号进行命令替换,替换为命令字符的执行结果输出内容。

1

打赏

海报

正在生成.....

评论 (0)

取消