panjianm 发表于 2018-8-21 13:49:47

一、Linux Shell基础

  1.1、shell基础
  Bash 是一个与Bourne Shell兼容的、执行从标准输入设备文件读取的命令的语言解释器。Bash是Bournae-Again Shell的缩写。Bash与原来的Unix sh Shell向后兼容,并且融合了一些有用的Korn Shell和C Shell的特性。它相对于sh在编程和交互式使用两方面都有功能改进。另外,大部分的sh脚本可以在不修改的情况下由Bash直接运行。
  Linux环境由以下几部分构成:
  内核-------------------Linux操作系统的核心
  Shell------------------为用户和内核提供一个交互环境
  终端模拟器-------------允许用户输入命令并在屏幕上回显命令的运行结果
  Linux桌面和窗口管理器--Linux桌面是各种软件应用程序的集合、它包含文件管理器、窗口管理器等
  与登录Shell相关的文件
  当Linux系统的运行级别为3时,用户可以从本地登录到系统控制台,或在系统运行级别为5时直接以图形界面方式登陆。在这两种情况下登录时都需要输入用户名和密码。用户登陆时Bash将会使用以下初始化文件和启动脚本:
  /etc/profile------------------系统级的初始化文件,定义了一些环境变量,由登录Shell调用执行
  /etc/bash.bashrc或者/etc/bashrc----其文件名根据不同的Linux发行版而异,每个交互式shell的系统级的启动脚本,定义了一些函数和别名
  /etc/bash.logout--------------系统级的登录shell清理脚本,当登陆shell退出时执行
  $HOME/.bash_profile、$HOME/.bash_login、$HOME/.profile--用户个人初始化脚本,由登录shell调用执行。这三个脚本只有一个会被执行,按照此顺序查找,第一个存在的将被执行
  $HOME/.bashrc----------------用户个人的每个交互式shell启动脚本
  $HOME/.bash_logout-----------用户个人的登录shell清理脚本,当登录shell退出时执行
  $HOME/.inputrc---------------用户个人的由readline使用的启动脚本,定义了处理某些情况下的键盘映射
  交互式登录式读取次序:(直接通过终端输入用户信息登录系统)
  /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
  非交互式登录读取次序:(su ,图形界面的终端,执行脚本)
  ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
  1.2、bash操作基本技巧
  (1)光标跳转:
  Ctrl+a:跳到命令行首
  Ctrl+e跳到命令行尾
  Ctrl+u:删除光标至命令行首的内容
  Ctrl+k:删除光标至命令行尾的内容
  Ctrl+l:清屏
  Ctrl+z:将当前命令送至后台
  Ctrl+shift+c:复制
  Ctrl+shift+v:粘贴
  (2)History:查看命令历史列表
  -c:清空命令历史
  -d : 删除指定位置的命令
  -w:保存命令历史至历史文件中
  缓冲区中的命令会在shell退出时保存至 .bash_history文件中
  命令历史相关的环境变量:
  HISTSIZE:命令历史中可以保存的命令的个数;
  HISTFILE:命令历史文件;
  HISTFILESIZE:命令历史文件可以保存的命令的个数;
  HISTCONTROL:控制命令历史的生成;
  ignoredups:忽略记录重复的命令;连续的相同命令才为重复;
  ignorespace:不记录以空白字符开头的命令;
  ignoreboth:同时具有上面两种特性;
  (3)命令历史的使用技巧:
  !n:执行命令历史中的第n条命令;
  !-n:执行命令历史中的倒数第n条命令;
  !!: 执行上一条命令;
  !string:执行命令历史中最近一个以指定字符串开头的命令
  !$:引用前一个命令的最后一个参数(或者Esc, .   Alt+.);
  (4)命令别名:在shell中定义的别名仅在当前shell生命周期中有效。
  alias CMDALIAS='COMMAND '
  (5)命令替换: $(COMMAND)或者 `COMMAND`
  (6)文件名通配: globbing
  *:任意长度的任意字符
  ?:任意单个字符
  [^]:匹配指定字符范围外的任意单个字符如:[^0-9]
  []:匹配指定范围内的任意单个字符
  [:space:]:空白字符
  [:punct:]:标点符号
  [:lower:]:小写字母
  [:upper:]: 大写字母
  [:alpha:]: 大小写字母
  [:digit:]:数字
  [:alnum:]: 数字和大小写字母
  1.3、bash脚本基础知识
  1、变量中字符的长度:${#VARNAME}
  2、脚本配置文件
  /etc/rc.d/init.d/服务脚本;
  配置文件:/etc/sysconfig/服务脚本同名的配置文件
  3、局部变量定义
  local VAR_NAME=
  4、命令mktemp   创建临时文件或目录
  mktemp /tmp/file.XX -d: 创建为目录
  5、信号kill -SIGNAL PID
  信号状态1: HUP2: INT   9: KILL   15: TERM
  trap 'COMMAND' 信号列表
  信号捕捉,但9和15无法捕捉Ctrl+c: SIGINT
  6、一行执行多个语句,语句间用分号分隔
  7、测试脚本是否有语法错误:
  bash -n 脚本       bash -x 脚本:单步执行
  8、第一行:#!/bin/bash    exit: 退出脚本
  /dev/null:等价于一个只写文件. 所有写入它的内容都会永远丢失
  

页: [1]
查看完整版本: 一、Linux Shell基础