Linux和Shell

					大数据入门
          Linux和       Windows区别
          Windows				Linux

费用 收费且很贵 Linux免费或少许费用
Centos下载地址

Linux目录结构
阿里镜像 https://opsx.alibaba.com/mirror
网易镜像 http://mirrors.163.com/
清华镜像 https://mirrors.tuna.tsinghua.edu.cn/
Linux目录结构简介
目录结构 说明
/bin 是Binary的缩写,这个目录存放着最经常使用的命令
/sbin s就是Super User的意思,这里存放的系统管理员使用的系统管理程序
/home 存放普通用户的主目录,在Linux中每个用户都有自己的一个目录,一般该目录是以用户的账户命名
/root 该目录为系统管理员,也称作超级权限者的用户主目录
/lib 系统开机所需要最基本的动态连接共享库,其作用类似于Windows里面的DLL文件。几乎所有的应用程序都需要用到这些共享库
/etc 所有的系统管理所需要的配置文件和子目录
/usr 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于Windows下的program files目录
/boot 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件,自己的安装别放这里
/proc 这个目录是一个虚拟目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息
/srv Servic的缩写,该目录存放一些服务启动之后需要提取的数据
/sys 这是Linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs
/tmp 这个目录是用来存放一些临时文件的
/dev 类似于Windows的设备管理器,把所有的硬件用文件的形式存储
/media Linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux会把识别的设备挂载到这个目录下面
/mnt 系统提供该目录是为了让用户临时挂载别的文件系统,我们可以将外部存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了
/opt 这是给主机额外安装软件所摆放的目录。比如你安装一个MySQL数据则就可以放到这个目录下。默认是空的。
/var 这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括日志文件
/selinux Selinux是一种安全自系统,它能控制程序只访问特定文件
/lost+found 这个目录一般情况下空的,当系统非法关机后,这里就存放了一些文件

VI/VIM语法
yy 复制光标当前一行
y数字y 复制一段(从第几行到第几行)
p 箭头移动到目的行粘贴
u 撤销上一步
dd 删除光标当前行
d数字d 删除光标(含)后多少行
x 删除一个字母,相当于del,向后删
X 删除一个字母,相当于Backspace,向前删
yw 复制一个词
dw 删除一个词
shift+^ 移动到行头
shift+$ 移动到行尾
gg或者1+G 移动到页头
G 移动到页尾
数字+G(先输入数字,在按G) 行
i 当前光标前
a 当前光标后
o 当前光标行的下一行
I 光标所在行最前
A 光标所在行最后
O 当前光标行的上一行

Linux命令
指令模式
:w 保存
:q 退出
:! 强制执行
/ 要查找的词 n 查找下一个,N 往上查找
? 要查找的词 n是查找上一个,N是往下查找
:set nu 显示行号
:set nonu 关闭行号
ZZ(shift+zz) 没有修改文件直接退出,如果修改了文件保存后退出

常用基本命令
NAME 命令的名称和单行描述
SYNOPSIS 怎样使用命令
DESCRIPTION 命令功能的深入讨论
EXAMPLES 怎样使用命令的例子
SEE ALSO 相关主题(通常是手册页)
快捷键
ctrl + c 停止进程
ctrl+l 清屏;彻底清屏是:reset
ctrl + q 退出
善于用tab键 提示(更重要的是可以防止敲错)
上下键 查找执行过的命令
ctrl +alt linux和Windows之间切换

用户组管理命令
新增 groupadd 组名
删除 groupdel 组名
修改 groupmod -n 新组名 老组名

Shell概述
编程语言分类
(1)编译型语言:
程序在执行之前需要个专门的编译过程,把程序编译成为机器语言文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依养编译器,跨平台性差些。如C、C++

(2)解释型语言:
程序不需要编译,程序在运行时由解释器翻译成机器语言,每执行一次都要翻译一次。因此效率比较低。比如Python/javaScript/Shell等都是解释型语言。
Shell脚本入门
简单来说脚本就是将需要执行的命令保存到文本中,按照顺序执行,它是解释型的,不需要编译
脚本必须以#!/bin/bash或者#!/bin/env bash开头(指定解析器)

什么时候需要定义变量?
1,如果某个内容需要多次使用,并且在代码中重复出现,在代码修改内容的时候,仅仅需要修改变量的值。
2,在代码运作的过程中,可能会把某些命令的执行结果保存起来,后续代码需要使用这些结果,
就可以直接使用这个变量。

自定义变量
1.基本语法
(1)定义变量:变量名=变量值
(2)撤销变量:unset 变量名
(3)声明静态变量:readonly变量,注意:不能unset
2.变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
(2)等号两侧不能有空格
(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号括起来。
2,特殊变量:$n
基本语法
$n (功能描述:n为数字,$0代表该脚本名称,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 9{10})

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

4,特殊变量: ∗ 、 *、 @
1.基本语法
∗ ( 功 能 描 述 : 这 个 变 量 代 表 命 令 行 中 所 有 的 参 数 , * (功能描述:这个变量代表命令行中所有的参数, *把所有的参数看成一个整体)
@ ( 功 能 描 述 : 这 个 变 量 也 代 表 命 令 行 中 所 有 的 参 数 , 不 过 @ (功能描述:这个变量也代表命令行中所有的参数,不过 @@把每个参数区分对待)
5,特殊变量:$?
1.基本语法
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)

Shell 中的数组
Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:
方式2: arr=(value1 value2 value3) (这种方式带值)
注意:往数组里添加值,数组的长度自动增长
案例实操
#!/bin/bash
my_array=(A B “C” D)
我们也可以使用下标来定义数组:
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
读取数组
读取数组元素值的一般格式是:
$ echo {array_name[index]}

获取数组中的所有元素
使用@ 或 * 可以获取数组中的所有元素,例如:
#!/bin/bash
echo "数组的元素为: ${my_array[]}"
echo “数组的元素为: ${my_array[@]}”
遍历数组
案例实操
#!/bin/bash
arr=(1 2 3 4 5 6 7)
for i in ${arr[
]}
do
echo $i
done

运算符
基本语法
(1)“ ( ( 运 算 式 ) ) ” 或 “ ((运算式))”或“ (())[运算式]” + , - , *, /, % 加,减,乘,除,取余
(2)expr + , - , *, /, % 加,减,乘,除,取余
注意:expr运算符间要有空格

案例实操:
(1)计算3+2的值
[jinghang@hadoop101 datas]$ expr 2 + 3
5
(2)计算3-2的值
[jinghang@hadoop101 datas]$ expr 3 - 2
1
(3)计算(2+3)X4的值
(a)expr一步完成计算
[jinghang@hadoop101 datas]$ expr expr 2 + 3 * 4
20
(b)采用KaTeX parse error: Expected 'EOF', got '#' at position 35: …adoop101 datas]#̲ S=[(2+3)*4]
[jinghang@hadoop101 datas]# echo $S
(4)支持小数运算
[jinghang@hadoop101 datas]# echo $(echo “scale=1; a + a+ a+b” | bc)

条件判断
基本语法
[ condition ](注意condition前后要有空格)
注意:条件非空即为true,[ jinghang ]返回true,[] 返回false。
2. 常用判断条件
(1)两个整数之间比较
= 字符串比较
-lt 小于(less than) -le 小于等于(less equal)
-eq 等于(equal) -gt 大于(greater than)
-ge 大于等于(greater equal) -ne 不等于(Not equal)
(2)按照文件权限进行判断
-r 有读的权限(read) -w 有写的权限(write)
-x 有执行的权限(execute)
(3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件(file)
-e 文件存在(existence) -d 文件存在并是一个目录(directory)

流程控制(重点)
基本语法
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格
2.案例实操
(1)输入一个数字,如果是1,则输出banzhang zhen shuai,如果是2,则输出cls zhen mei,如果是其它,什么也不输出。
[jinghang@hadoop101 datas]$ touch if.sh
[jinghang@hadoop101 datas]$ vim if.sh

#!/bin/bash
if [ $1 -eq “1” ]
then
echo “banzhang zhen shuai”
elif [ 1 − e q " 2 " ] t h e n e c h o " c l s z h e n m e i " f i [ j i n g h a n g @ h a d o o p 101 d a t a s ] 1 -eq "2" ] then echo "cls zhen mei" fi [jinghang@hadoop101 datas] 1eq"2"]thenecho"clszhenmei"fi[jinghang@hadoop101datas] chmod 777 if.sh
[jinghang@hadoop101 datas]$ ./if.sh 1
banzhang zhen shuai

case 语句
1.基本语法
case 变 量 名 i n " 值 1 " ) 如 果 变 量 的 值 等 于 值 1 , 则 执 行 程 序 1 ; ; " 值 2 " ) 如 果 变 量 的 值 等 于 值 2 , 则 执 行 程 序 2 ; ; … 省 略 其 他 分 支 … ∗ ) 如 果 变 量 的 值 都 不 是 以 上 的 值 , 则 执 行 此 程 序 ; ; e s a c 注 意 事 项 : 1 ) c a s e 行 尾 必 须 为 单 词 “ i n ” , 每 一 个 模 式 匹 配 必 须 以 右 括 号 “ ) ” 结 束 。 2 ) 双 分 号 “ ; ; ” 表 示 命 令 序 列 结 束 , 相 当 于 j a v a 中 的 b r e a k 。 3 ) 最 后 的 “ ∗ ) ” 表 示 默 认 模 式 , 相 当 于 j a v a 中 的 d e f a u l t 。 案 例 实 操 ( 1 ) 输 入 一 个 数 字 , 如 果 是 1 , 则 输 出 b a n z h a n g , 如 果 是 2 , 则 输 出 c l s , 如 果 是 其 它 , 输 出 r e n y a o 。 [ j i n g h a n g @ h a d o o p 101 d a t a s ] 变量名 in "值1") 如果变量的值等于值1,则执行程序1 ;; "值2") 如果变量的值等于值2,则执行程序2 ;; …省略其他分支… *) 如果变量的值都不是以上的值,则执行此程序 ;; esac 注意事项: 1)case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。 2)双分号“;;”表示命令序列结束,相当于java中的break。 3)最后的“*)”表示默认模式,相当于java中的default。 案例实操 (1)输入一个数字,如果是1,则输出banzhang,如果是2,则输出cls,如果是其它,输出renyao。 [jinghang@hadoop101 datas] in"1"11;;"2"22;;;;esac1)casein2);;javabreak3)javadefault11banzhang2clsrenyao[jinghang@hadoop101datas] touch case.sh
[jinghang@hadoop101 datas]$ vim case.sh

!/bin/bash

case $1 in
“1”)
echo “banzhang”
;;

“2”)
echo “cls”
;;
*)
echo “renyao”
;;
esac

[jinghang@hadoop101 datas]$ chmod 777 case.sh
[jinghang@hadoop101 datas]$ ./case.sh 1
1

for 循环
1.基本语法1
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
2.案例实操
(1)从1加到100
[jinghang@hadoop101 datas]$ touch for1.sh
[jinghang@hadoop101 datas]$ vim for1.sh

#!/bin/bash

s=0
for((i=0;i<=100;i++))
do
s= [ [ [s+$i]
done
echo $s

[jinghang@hadoop101 datas]$ chmod 777 for1.sh
[jinghang@hadoop101 datas]$ ./for1.sh
“5050”

while 循环
1.基本语法
while [ 条件判断式 ]
do
程序
done

2.案例实操
(1)从1加到100
[jinghang@hadoop101 datas]$ touch while.sh
[jinghang@hadoop101 datas]$ vim while.sh

#!/bin/bash
s=0
i=1
while [ i − l e 100 ] d o s = i -le 100 ] do s= ile100]dos=[ s + s+ s+i]
i= [ [ [i+1]
done
echo s [ j i n g h a n g @ h a d o o p 101 d a t a s ] s [jinghang@hadoop101 datas] s[jinghang@hadoop101datas] chmod 777 while.sh
[jinghang@hadoop101 datas]$ ./while.sh
5050

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值