Shell体系性学习(精简速学)-从入门到入土

目录

1.定义执行环境

2.shell中的特殊符号

3.重定向

skill: 在EOF脚本中获取环境变量

4.管道

5.运算

四则运算等

大小比较运算

字符串比较运算

逻辑运算

赋值运算

文件比较与检查

6.字符串截取等操作

6.1字符串截取:

7.退出脚本与异常控制

二.基础

1.echo格式化输出

2.read基本输入

3.变量

4.数组

4.1基本数组

4.2关联数组

5.if语句

if语法

if高级应用

6.for语句

7.循环控制

三.补充拓展

1.字符串切割

2.多进程

3.正则


1.定义执行环境

如#!/bin/bash是指定该脚本由/bin/bash来运行。

2.shell中的特殊符号

 !        执行历史命令,!!执行上一条命令

&        后台执行

*         默认是通配符,如果想作为乘号,需要转义,如 expr 3 \* 3

$?       返回上一条命令是否执行成功,0代表成功,其他代表失败。

` `       反引号,用于在命令中执行命令,如 echo " Date: `date +%F` "

' '        单引号代表字符串,但不同于双引号的是,单引号不解释变量。

                   如 echo '$USER' 输出 $USER

                        echo "$USER" 输出 root

                        echo ''$USER'' 输出 root (这边是连续输入两次单引号)

" "        双引号代表字符串。

更多特殊符号,参考:shell中的特殊符号

3.重定向

>          输入,覆盖之前的输入

>>        追加输入,追加到原来输入的内容之后

<          输出,如 wc < text.txt

<<        追加输出。可用于多行数据追加输入,也可用于自动执行交互式命令。如:

CASE1:通过追加输出,将多行数据重定向到spark-shell命令

#追加输出的内容可以写在左右括号(EOF或者END代表左右括号)之间
spark-shell  << EOF
#scala脚本


EOF

skill: 在EOF脚本中获取环境变量

注意,如果希望在如上的scala脚本中使用shell中的变量,则可以通过export将变量声明为环境变量,再通过scala的sys.env("环境变量名")获取。

CASE2:通过追加输出,实现自动化交互

#需要交互的命令顶格写进去
fdisk /dev/sdb  << END
n
p
3

+204M
q
END

4.管道

把一个命令的输出作为下一个命令的输入,以这种方式连接的两个或者多个命令就形成了管道(pipe)。

重定向操作符>将命令与文件连接起来,用文件来接收命令的输出;而管道符|将命令与命令连接起来,用第二个命令来接收第一个命令的输出。

CASE:读取文件到内存

cat file | while read line
    do
        echo $line
done

     

5.运算

  • 四则运算等

expr 1 + 2; expr 1 - 2; expr 1 \* 2; expr 1 / 2

$((10**3)) #3次方; $(((1+1*5)/4));$((3%2))

bc命令也可以用于计算,需要先安装bc:yum -y install bc

  • 大小比较运算

-eq 等于;-gt 大于;-lt 小于;-ge 大于等于;-le 小于等于;-ne 不等于

如,test num1 -eq num2;echo $?

if [[ $? -ne 0 ]];then
    echo "Failed!"
fi
  • 字符串比较运算

-z         字符串长度是否为0

-n         长度是否大于0

==         等于

!=          不等于

if (( "a" == "a" ));then
    echo "true"
fi
  • 逻辑运算

&&         逻辑与          if [ 1 -eq 1 ] && [ 2 -eq 2 ];then echo "true";else echo "false";fi

||            逻辑或

!             逻辑非

  • 赋值运算

=         赋值

  • 文件比较与检查

-d 目录是否存在

-f 文件是否存在

-e 目录或文件是否存在

-r 检查文件是否存在且可读

-s 检查文件是否存在且不为空

-w 检查文件是否存在且可写

-x 检查文件是否存在且可执行

-O 检查文件是否存在且被当前用户拥有

-G 检查文件是否存在且默认组为当前用户组

file1 -nt file2 检查file1是否比file2新,比较的是修改时间

file1 -ot file2 检查file1是否比file2旧,比较的是修改时间

file1 -ef file2 检查两个文件的Inode是否相同,如果是硬连接,则相同。

6.字符串截取等操作

6.1字符串截取:

  • 常见的8种字符串截取方法:
${var#*/}
${var##*/}
${var%/*}
${var%%/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值