Shell概述

shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核

脚本入门

脚本格式

脚本以#!/bin/bash开头(指定解析器)

helloworld

# 创建脚本
[linux@localhost datas]$ cat helloworld.sh
#!/bin/bash
echo "hello huangxb"# 执行脚本方式1
[linux@localhost datas]$ bash helloworld.sh
hello huangxb# 执行脚本方式2
[linux@localhost datas]$ ./helloworld.sh
-bash: ./helloworld.sh: 权限不够

方式1,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限;方式2,本质是脚本自己需要执行,所以需要执行权限

多命令处理

  • 在linux家目录下创建一个bangzhang.txt并在文件中写入"I IOVE YOU"字符
#!/bin/bash
cd /home/linux/
touch banzhang.txt
echo "I LOVE YOU" >> banzhang.txt

Shell中的变量

常用系统变量

$HOME $PWD $SHELL $USER

[linux@localhost datas]$ echo $HOME
/home/linux
[linux@localhost datas]$ echo $PWD
/home/linux/datas
[linux@localhost datas]$ echo $SHELL
/bin/bash
[linux@localhost datas]$ echo $USER
linux

自定义变量

基本语法

  1. 定义变量:变量=值 等号两边不能留有空格
  2. 撤销变量:unset 变量
  3. 输出变量:echo $变量
  4. 声明静态变量: readonly 变量,注意:不能unset
[linux@localhost datas]$ A=1
[linux@localhost datas]$ echo $A
1
[linux@localhost datas]$ unset A

变量定义规则

  1. 变量名称可以由字母,数字和下划线组成,不能以数字开头,环境变量名建议大写
  2. 等号两侧不能有空格
  3. 在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
  4. 变量的值如果有空格,需要使用双引号或单引号括起来
[linux@localhost datas]$ D="A B C"
[linux@localhost datas]$ echo $D
A B C
  1. 可把变量提升为全局变量,可供其他shell程序使用
    export 变量

特殊变量

$n

$n (描述:n为数字,$0代表脚本名称,10以内参数用$1-9表示,10以上的需要用大括号包含,9表示,10以上的需要用大括号包含,9表示,10以上的需要用大括号包含,{10})

#!/bin/bash
echo "$0 $1 $2 $3"

$#

$# (功能描述:获取所有输入参数个数,常用于循环)

#!/bin/bash
echo "$0 $1 $2 $3"
echo $#

$* 和$@

  • $* (描述:代表命令行中所有的参数,把所有参数看成一个整体)
  • $@ (描述:也代表命令行中所有的参数,不过把每个参数区分对待)
[linux@localhost datas]$ bash parameter.sh test1 test2
parameter.sh test1 test2
2
test1 test2
test1 test2

$?

$? (描述:最后一次执行命令的状态,0:正确执行)

运算符

  1. $((运算式)) 或 $[运算式]
  2. expr +,-,\*,/,% 加减乘除取余
    expr运算符间要有空格
# 计算2+3
[linux@localhost datas]$ expr 2 + 3
5# 计算(2+3)*4
## 方式1
[linux@localhost datas]$ expr `expr 2 + 3` \* 4
20## 方式2
[linux@localhost datas]$ s=$[(2+3)*4]
[linux@localhost datas]$ echo $s
20

条件判断

基本语法

[condition] (注意 condition前后要有空格)

常用判断条件

两个整数之间比较

符号 描述
-lt (less than)小于
-le (less equal) 小于等于
-eq (equal)等于
-gt (greater than) 大于
-ge (greater equal) 大于等于
-ne (not equal) 不等于

文件权限判断

  • -r 有读的权限
  • -w 有写的权限
  • -x 有执行的权限

文件类型判断

  • -f 文件存在并且是一个常规文件
  • -e 文件存在
  • -d 文件存在病是一个目录
# 判断23是否大于2
[linux@localhost datas]$ [ 23 -gt 2 ]
[linux@localhost datas]$ echo $?
0# 判断helloworld.sh是否有写入权限
[linux@localhost datas]$ [ -w hellowrld.sh ]
[linux@localhost datas]$ echo $?
1# 判断目录中文件是否存在
[linux@localhost datas]$ [ -e /home/linux/datas ]
[linux@localhost datas]$ echo $?
0

多条件判断

&& ||

流程控制

IF判断

[linux@localhost datas]$ cat if.sh
#!/bin/bash
if [ $1 -eq 1 ]
thenecho "班长真帅"
elif [ $1 -eq 2 ]
thenecho "班长真丑"
fi
[linux@localhost datas]$ bash if.sh 2
班长真丑

case 语句

[linux@localhost datas]$ cat case.sh
#!/bin/bash
case $1 in
1)echo "班长"
;;
2)echo "学习委员"
;;
3)echo "体育委员"
;;
esac
[linux@localhost datas]$ bash case.sh 2
学习委员

for循环

语法1

[linux@localhost datas]$ cat for.sh
#!/bin/bash
s=0
for((i=1;i<=100;i++))
dos=$[$s+$i]
done
echo $s
[linux@localhost datas]$ bash for.sh
5050

语法2

[linux@localhost datas]$ cat for2.sh
#!/bin/bash
for i in $*
doecho $i
done
[linux@localhost datas]$ bash for2.sh 1 2
1
2

WHILE循环

[linux@localhost datas]$ cat while.sh
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
dos=$[$s + $i]i=$[$i + 1]
done
echo $s[linux@localhost datas]$ bash while.sh
5050

read读取控制台输入

read(选项)(参数)
  • -p 指定读取值时的提示符
  • -t 指定读取值时等待的时间(秒)
# 提示7秒内,读取控制台输入的名称
[linux@localhost datas]$ cat read.sh
#!/bin/bash
read -t 7 -p "在7s内请输入你的名字" NAME
echo $NAME
[linux@localhost datas]$ bash read.sh
在7s

函数

系统函数

basename

basename [string / pathname] [suffix] (描述:basename命令会删掉所有的前缀包括最后一个‘/’字符,然后将字符串显示出来)
# 方式1
[linux@localhost datas]$ basename /home/linux/banzhang.txt
banzhang.txt# 方式2
[linux@localhost datas]$ basename /home/linux/banzhang.txt .txt
banzhang

dirname

dirname 文件绝对路径 (描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
[linux@localhost datas]$ dirname /home/linux/banzhang.txt
/home/linux

自定义函数

# 格式
[ function ] funname[()]
{Action:[return int;]
}
funname
# DESC 计算输入两个参数的值
[linux@localhost datas]$ cat sum.sh
#!/bin/bash
function sum(){s=0;s=$[$1 + $2]echo $s
}
read -p "input your param1:" P1
read -p "input your param2:" P2
sum $P1 $P2
[linux@localhost datas]$ bash sum.sh
input your param1:1
input your param2:2
3

shell工具

cut

cut命令从文件的每一行剪切字节,字符和字段并将这些字节,字符和字段输出
cut [选项参数] filename

  • -f 列号,提取第几列
  • -d 分隔符,按照指定分隔符分隔列
# DESC 切割cut.txt第一列
[linux@localhost datas]$ cat cut.txt
dong shen
guan zhen
wo wo
lai lai
le le
[linux@localhost datas]$ cut -d " " -f 1 cut.txt
dong
guan
wo
lai
le# DESC 获取第三行第一个单词
[linux@localhost datas]$ cat cut.txt | grep guan | cut -d " " -f 1
guan

sed

sed是一种流编辑器,它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,成为“模式空间”,接着sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕,接着处理下一行,这样不断重复,知道文件末尾,文件内容并没有改变,除非你使用重定向存储输出
sed [选项参数] ‘command’ filename

  • -e 直接在指令列模式上进行sed的动作编辑

命令功能描述

  • a 新增
  • d 删除
  • s 查找并替换
# DESC 在第二行后增加mei nv字符
[linux@localhost datas]$ sed -e "2a mei nv" sed.txt
dong zhen
guan zhen
mei nv
wo wo
lai lai

awk

awk 一个强大文件分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理

awk [选项参数] 'pattern1 {action1} pattern2{action2}..' filename
  • -F 指定输入文件分隔符
  • -v 赋值一个用户定义变量

sort

sort 命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出

sourt [选项] (参数)
参数 描述
-n 依照数值大小排序
-t 以相反的顺序排序
-t 设置排序时使用的分隔字符
-k 指定需要排序的列

【笔记】shell编程——尚硅谷大数据技术之Shell相关推荐

  1. 尚硅谷大数据技术Spark教程-笔记02【SparkCore(核心编程,map、mapPartitions、mapPartitionsWithIndex、flatMap、glom、groupBy)】

    视频地址:尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01[Spark(概述.快速上手.运行环境.运行架构)] 尚硅谷大数据技术Spark教 ...

  2. 尚硅谷大数据技术Spark教程-笔记01【Spark(概述、快速上手、运行环境、运行架构)】

    视频地址:尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01[Spark(概述.快速上手.运行环境.运行架构)] 尚硅谷大数据技术Spark教 ...

  3. 尚硅谷大数据技术Scala教程-笔记04【集合】

    视频地址:尚硅谷大数据技术之Scala入门到精通教程(小白快速上手scala)_哔哩哔哩_bilibili 尚硅谷大数据技术Scala教程-笔记01[Scala课程简介.Scala入门.变量和数据类型 ...

  4. 尚硅谷大数据技术Spark教程-笔记09【SparkStreaming(概念、入门、DStream入门、案例实操、总结)】

    尚硅谷大数据技术-教程-学习路线-笔记汇总表[课程资料下载] 视频地址:尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01[SparkCore ...

  5. 尚硅谷大数据技术Hadoop教程-笔记03【Hadoop-HDFS】

    视频地址:尚硅谷大数据Hadoop教程(Hadoop 3.x安装搭建到集群调优) 尚硅谷大数据技术Hadoop教程-笔记01[大数据概论] 尚硅谷大数据技术Hadoop教程-笔记02[Hadoop-入 ...

  6. 尚硅谷大数据技术Zookeeper教程-笔记01【Zookeeper(入门、本地安装、集群操作)】

    视频地址:[尚硅谷]大数据技术之Zookeeper 3.5.7版本教程_哔哩哔哩_bilibili 尚硅谷大数据技术Zookeeper教程-笔记01[Zookeeper(入门.本地安装.集群操作)] ...

  7. 尚硅谷大数据技术Hadoop教程-笔记02【Hadoop-入门】

    视频地址:尚硅谷大数据Hadoop教程(Hadoop 3.x安装搭建到集群调优) 尚硅谷大数据技术Hadoop教程-笔记01[大数据概论] 尚硅谷大数据技术Hadoop教程-笔记02[Hadoop-入 ...

  8. 尚硅谷大数据技术Hadoop教程-笔记01【大数据概论】

    视频地址:尚硅谷大数据Hadoop教程(Hadoop 3.x安装搭建到集群调优) 尚硅谷大数据技术Hadoop教程-笔记01[大数据概论] 尚硅谷大数据技术Hadoop教程-笔记02[Hadoop-入 ...

  9. 尚硅谷大数据技术之电商用户行为数据分析

    尚硅谷大数据技术之电商用户行为分析 第1章 项目整体介绍 1.1 电商的用户行为 电商平台中的用户行为频繁且较复杂,系统上线运行一段时间后,可以收集到大量的用户行为数据,进而利用大数据技术进行深入挖掘 ...

最新文章

  1. leetcode算法题--0~n-1中缺失的数字
  2. 【安全漏洞】ThinkPHP 3.2.3 漏洞复现
  3. linux ant 解决 错误: 找不到或无法加载主类 org.apache.tools.ant.launch.Launcher
  4. Practice:在2008 core上部署和管理DHCP服务器
  5. java代码输出伞_在伞中集成测试Web应用程序的问题
  6. Django框架之DRF 认证组件源码分析、权限组件源码分析、频率组件源码分析
  7. Git之如何解决Error:pathspec ‘/layout/radar_chart.xml‘ did not match any file(s) known to
  8. mysql 创建和删除库_mysql入门系列:mysql创建、删除和选择数据库
  9. 3.10 神经网络的梯度下降法-推导
  10. mint ui css覆盖,vue中配置mint-ui报css错误问题的解决方法
  11. 【优化算法】广义正态分布优化算法(GNDO)【含Matlab源码 1531期】
  12. c语言二维数组学习,C语言学习之二维数组的传参
  13. 天宫初级认证答案_跨境电商人才初级认证试题以及答案
  14. 软件四种维护详解(更正性维护、适应性维护、完善性维护、预防性维护)
  15. Tomcat HTTP的端口号和redirectPort(重定向)端口号
  16. 数字图像处理之拉普拉斯算子
  17. Frogs - HDU5514
  18. ubuntu设置网卡默认启动_ubuntu 网络配置
  19. 尝试用ATTINY88开发板做虚拟键盘
  20. ​Aqua Data Studio 22.2 Crack

热门文章

  1. css 实现鼠标光标悬停的样式
  2. 以LAN8720A为例的以太网硬件设计方案
  3. Unity 云构建 云打包项目 Unity Cloud Build
  4. 裁员吵架散摊子, 马斯克:我太难了;狠心开源一个舆情获取项目;特征工程跟调参一样简单了?!NeRF大佬直呼卷不动了;前沿论文 | ShowMeAI资讯日报
  5. 鸿蒙的拼音是什么,鸿蒙的意思
  6. 镖局运镖(最小生成树 Kruskal)
  7. react引入html不能解析,反应:找不到模块:无法解析“ react-html-parser”
  8. sublime 学习笔记之ubuntu下让sublime text 3成为默认编辑器
  9. 大学c语言程序上机考试试题,C语言上机试题100套
  10. React项目中应用TypeScript