乐趣区

大数据系列shell的简单语法

1. Linux 简介

  • Linux 内核 最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的
  • Linux 是一套免费使用和自由传播的类 Unix 操作系统
  • Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议

2. Linux 的发行版

  • Linux 的发行版说简单点就是将 Linux 内核与应用软件做一个打
  • Ubuntu(图形化接口, 个人用户操作比较良好)
  • RedHat(企业使用的比较多, 图形化接口比较 low, 收费)
  • CentOS(免费 开源 图形化接口比较 low)
  • Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS

3. Linux 应用领域

  • 作为企业服务器
  • 嵌入式

4. Linux vs Windows

比较 Windows Linux
界面 界面统一,外壳程序固定所有 Windows 程序菜单几乎一致,快捷键也几乎相同 图形界面风格因发行版不同而不同,可能互不兼容。GNU/Linux 的终端机是从 UNIX 传承下来,基本命令和操作方法也几乎一致。
驱动程序 驱动程序丰富,版本更新频繁。默认安装程序里面一般包含有该版本发布时流行的硬件驱动程序,之后所出的新硬件驱动依赖于硬件厂商提供。对于一些老硬件,如果没有了原配的驱动有时很难支持。另外,有时硬件厂商未提供所需版本的 Windows 下的驱动,也会比较头痛。 由志愿者开发,由 Linux 核心开发小组发布,很多硬件厂商基于版权考虑并未提供驱动程序,尽管多数无需手动安装,但是涉及安装则相对复杂,使得新用户面对驱动程序问题(是否存在和安装方法)会一筹莫展。但是在开源开发模式下,许多老硬件尽管在 Windows 下很难支持的也容易找到驱动。HP、Intel、AMD 等硬件厂商逐步不同程度支持开源驱动,问题正在得到缓解。
使用 使用比较简单,容易入门。图形化界面对没有计算机背景知识的用户使用十分有利。 图形界面使用简单,容易入门。文字界面,需要学习才能掌握。
学习 系统构造复杂、变化频繁,且知识、技能淘汰快,深入学习困难。 系统构造简单、稳定,且知识、技能传承性好,深入学习相对容易。
软件 每一种特定功能可能都需要商业软件的支持,需要购买相应的授权。 大部分软件都可以自由获取,同样功能的软件选择较少。

5. Linux 的安装

刚开始已经安装过 centeros6.5

6. Linux 系统启动过程

  • 内核的引导

    • 当计算机打开电源后,首先是 BIOS 开机自检,按照 BIOS 中设置的启动设备(通常是硬盘)来启动。

      操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。

  • 运行 init

    • init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。

      init 程序首先是需要读取配置文件 /etc/inittab

  • 系统初始化

    • 在 init 的配置文件中有这么一行:si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了 /etc/rc.d/rc.sysinit,而 rc.sysinit 是一个 bash shell 的脚本,它主要是完成一些系统初始化的工作,rc.sysinit 是每一个运行级别都要首先运行的重要脚本
  • 建立终端

    • rc 执行完毕后,返回 init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。

      init 接下来会打开 6 个终端,以便用户登录系统。在 inittab 中的以下 6 行就是定义了 6 个终端:

  • 用户登录系统

    • 命令行登录
    • ssh 登录
    • 图形界面登录

7. Linux 系统目录结构

  • /bin bin 是 Binary 的缩写, 这个目录存放着最经常使用的命令
  • /boot 这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件
  • /dev dev 是 Device(设备)的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的
  • /etc 这个目录用来存放所有的系统管理所需要的配置文件和子目录
  • /home 用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的
  • /lib 这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库
  • /lost+found 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件
  • /media inux 系统会自动识别一些设备,例如 U 盘、光驱等等,当识别后,linux 会把识别的设备挂载到这个目录下。
  • /mnt 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了
  • /opt 这是给主机额外安装软件所摆放的目录。比如你安装一个 ORACLE 数据库则就可以放到这个目录下。默认是空的
  • /proc 这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
  • /root 该目录为系统管理员,也称作超级权限者的用户主目录
  • /sbin s 就是 Super User 的意思,这里存放的是系统管理员使用的系统管理程序
  • /selinux  这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放 selinux 相关的文件的
  • /srv 该目录存放一些服务启动之后需要提取的数据
  • /sys  这是 linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs。
  • /tmp 这个目录是用来存放一些临时文件的。
  • /usr 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
  • /usr/bin 系统用户使用的应用程序
  • /usr/sbin 超级用户使用的比较高级的管理程序和系统守护程序
  • /usr/src 内核源代码默认的放置目录。
  • /var 这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件

8. Linux 中忘记密码

  • !进入单用户模式更改一下 root 密码即可
  • 3 秒之内要按一下回车
  • 然后输入 a
  • 在 末尾输入 (single s S)其中的一个,有一个空格
  • 最后按回车启动,启动后就进入了单用户模式了
  • 此时已经进入到单用户模式了,你可以更改 root 密码了。更密码的命令为 passwd

9. Linux 的远程登录

  • ssh(putty mutty Secure CRT xshell)

10. Linux 文件基本属性

  • 当为 [d] 则是目录
  • 当为 [–] 则是文件;
  • 若是 [l] 则表示为链接文档(link file);ln -s 源文件 连接文件

11. 文件的权限

  • chmod u+x file
  • chmod u=wx file
  • chmod 421 file

12. Shell 简介

  • Shell 是一个用 C 语言编写的程序, 它是用户使用 Linux 的桥梁
  • Shell 既是一种命令语言,又是一种程序设计语言
  • Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务

13. Shell 脚本

  • Shell 脚本(shell script),是一种为 shell 编写的脚本程序。

14. Shell 环境

  • 编辑器 + 解释器
  • 解释器

    • Bourne Shell(/usr/bin/sh 或 /bin/sh)
    • Bourne Again Shell(/bin/bash)
    • C Shell(/usr/bin/csh )
    • K Shell(/usr/bin/ksh)
    • Shell for Root(/sbin/sh)

15. Shell 变量

  • 定义变量

    • 操作符左右不能有空格
  • 使用变量

    • 在变量名称之前添加$
  • 变量类型

    • 局部变量
    • 环境变量
    • shell 变量

16. Shell 字符串

  • 单引号
    • 单引号中的变量都会原样输出, 不会进行解析
  • 双引号
    • 双引号中的变量都会被解析

17. Shell 数组

  • 定义数组

    • ages=(12,14,16)

18.Shell 参数传递

  • $n —->n 为参数的下标, 从 0 开始,0 代表脚本本身的名称
  • $# 参数的个数
  • $? 上一条命令执行的结果 返回 0 代表成功, 其他代表失败

19. Shell 中的运算符

  • 算术运算符

运算符 说明 举例
+ 加法 expr $a + $b 结果为 30。
减法 expr $a - $b 结果为 -10。
* 乘法 expr $a \* $b 结果为 200。
/ 除法 expr $b / $a 结果为 2。
% 取余 expr $b % $a 结果为 0。
= 赋值 a=$b 将把变量 b 的值赋给 a。
== 相等。用于比较两个数字,相同则返回 true。 [$a == $b] 返回 false。
!= 不相等。用于比较两个数字,不相同则返回 true。 [$a != $b] 返回 true。

条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [$a == $b]

  • 关系运算符

运算符 说明 举例
-eq 检测两个数是否相等,相等返回 true。 [$a -eq $b] 返回 false。
-ne 检测两个数是否不相等,不相等返回 true。 [$a -ne $b] 返回 true。
-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [$a -gt $b] 返回 false。
-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [$a -lt $b] 返回 true。
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 [$a -ge $b] 返回 false。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [$a -le $b] 返回 true。
  • 布尔运算符

运算符 说明 举例
! 非运算,表达式为 true 则返回 false,否则返回 true。 [! false] 返回 true。
-o 或运算,有一个表达式为 true 则返回 true。 [$a -lt 20 -o $b -gt 100] 返回 true。
-a 与运算,两个表达式都为 true 才返回 true。 [$a -lt 20 -a $b -gt 100] 返回 false。
  • 逻辑运算符

运算符 说明 举例
&& 逻辑的 AND [[$a -lt 100 && $b -gt 100]] 返回 false
\ \ 逻辑的 OR [[$a -lt 100 $b -gt 100 ]] 返回 true

20. Shell 流程控制

  • if 语句
if condition
then
    command1 
    command2
    ...
    commandN 
fi
  • if.else 语句
if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi
  • if..elif..else
if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi
  • for 循环
for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done
  • for 循环遍历数组
#!/bin/bash
ages=(12 14 16)
for element in ${ages[@]}
do
echo $element
done
  • while
while condition
do
    command
done
  • 无限循环
while :
do
    command
done

或者

while true
do
    command
done

21. Shell 中的函数

  • 定义函数
[function] funname ()

{
    action;
    [return int;]
}
  • 调用函数

    函数名称

22. Shell 输入 / 输出重定向

输出重定向: command1 > file1
输出追加: command1 >> file1

23. 常用的 Shell 脚本

23.1 启动 zookeeper 集群

#!/bin/bash
#在 zkHosts 中配置的主机中启动 zookeeper
for zkHost in  `cat ./zkHosts`
do
#-T 进制分配伪终端 一般自动化脚本不需要分配伪终端
ssh -T  root@${zkHost}    << eeooff
         $ZOOKEEPER_HOME/bin/zkServer.sh  start
eeooff
done

23.2 停止 zookeeper 集群

#!/bin/bash
#在 zkHosts 中配置的主机中停止 zookeeper
for zkHost in  `cat ./zkHosts`
do
#-T 进制分配伪终端 一般自动化脚本不需要分配伪终端
ssh -T  root@${zkHost} >/dev/null 2>&1  << eeooff
         $ZOOKEEPER_HOME/bin/zkServer.sh  stop          
eeooff
done
退出移动版