设为首页 收藏本站
查看: 905|回复: 0

Linux学习笔记(15)shell基础之Bash基本功能

[复制链接]
发表于 2015-12-4 07:37:18 | 显示全部楼层 |阅读模式
1 shell概述
  shell是一个命令解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序。用户可以用shell启动、挂起、停止甚至是编写一些程序。
  shell是一个功能强大的编程语言,其特点是易编写、易调试及灵活性强。shell是解释执行的脚本语言,可直接调用Linux系统命令。
  shell通常分为两类:B shell和C shell。前者的主文件名为sh,后者主要用于BSD版本的Unix中,其语法格式和C语言类似。这两种shell的语法彼此间不兼容。Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本shell。
  Linux支持的shell可查看/etc/shells配置文件:
  [iyunv@localhost ~]# cat /etc/shells
  /bin/sh
  /bin/bash
  /sbin/nologin
  /bin/dash
  /bin/tcsh
  /bin/csh
  可通过输入其相应命令进行互相转换,如使用sh:
  [iyunv@localhost ~]# sh
  sh-4.1#
  sh-4.1# exit
  exit
  [iyunv@localhost ~]#

2 shell脚本的执行方式
  1)echo命令用于输出信息,其格式为:
  echo [选项] [输出内容]
  其中,-e选项支持反斜线控制的字符转换。常见的控制字符如下表:

  控制字符

  作用

  \\

  输出\本身

  \a

  输出警告音

  \b

  退格键,即向左删除键

  \c

  取消输出行末的换行符,与"-n"选项一致

  \e

  ESCAPE键

  \f

  换页符

  \n

  换行符

  \r

  回车键

  \t

  制表符,即Tab键

  \v

  垂直制表符

  \0nnn

  按照八进制ASCII码表输出字符,其中0为数字0,nnn是三位八进制数

  \xhh

  按照十六进制ASCII码表输出子非鱼,其中hh是两位十六进制数

  例:删除左侧字符:
  [iyunv@localhost ~]# echo -e "abcd\be"
  abce
  制表符与换行符:
  [iyunv@localhost ~]# echo -e "a\tb\tc\nd\te\tf"
  a       b       c
  d       e       f
  十六进制ASCII码输出:
  [iyunv@localhost ~]# echo -e "\x61\t\x62\t\x63\n\x64\t\x65\t\x66"
  a       b       c
  d       e       f
  输出颜色:
  [iyunv@localhost ~]# echo -e "\e[1;31m abcd \e[0m"
  abcd
  其中,"\e[1"表示开启颜色输出,"\e[0m"表示结束颜色输出。
  30m=黑色 31m=红色 32m=绿色 33m=黄色
  34m=蓝色 35m=洋红 36m=青色 37m=白色
  2)第一个脚本,其中第一行为shell标志,表示以下写的程序为shell脚本程序,后续的#表示注释
  [iyunv@localhost ~]# vi hello.h
  #!/bin/bash   
  #Description:   The first program     
  #Autor:         ws
  #Date:
  
  echo "hello world"
  3)脚本执行
  ①通过Bash调用执行脚本
  [iyunv@localhost ~]# bash hello.h
  hello world
  ②赋予执行权限,直接运行(习惯的执行方式)
  [iyunv@localhost ~]# chmod 755 hello.h
  [iyunv@localhost ~]# ./hello.h
  hello world
  引申:Linux的回车符用"$"表示,可用过cat –A进行查看;windows的回车符在Linux中显示为"^M$",需使用dos2unix命令进行转换。
  例:显示Linux文件中的回车符:



[iyunv@localhost sh1]# cat -A hello.sh
cription:   The first program     $
$
#Autor:         ws$
$
#Date: $
$
$
$
echo "hello world"$
3 Bash的基本功能

(1)历史命令与命令补全
  1)历史命令history,其格式为:
  history [选项] [历史命令保存文件]
  其中,-c选项表示清空历史命令(一般不建议),-w表示把缓存中的历史命令写入命令缓存文件~/.bash_history中。
  history命令默认保存1000条记录,可以在环境变量配置文件/etc/profile中进行更改,所在位置为:HISTSIZE=1000。
  历史命令的调用方式有:
  ①使用上下箭头调用
  ②使用"!n"执行第n条历史命令
  ③使用"!!"重复执行上一条命令
  ④使用"!字串"重复执行最后一条以该字串开头的命令
  2)在Bash中,命令与文件补全可通过"Tab"键来完成。

(2)命令别名与常用快捷键
  1)命令别名
  设定命令别名的格式为:alias 别名="原命令"
  查询命令别名的方式为:alias
  使用别名时注意命令的执行顺序:
  ①第一顺位为用绝对路径或相对路径执行的命令;
  ②第二顺位为执行别名;
  ③第三顺位为执行Bash的内部自带命令;
  ④第四顺位为执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令。
  可通过$PATH来查看系统的环境变量:
  [iyunv@localhost ~]# $PATH
  -bash: /usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin: 没有那个文件或目录
  注意:命令行定义的别名是临时的,如需永久生效,则在家目录的.bashrc中写入别名即可,如root下的别名文件:
  [iyunv@localhost ~]# vim /root/.bashrc
  # .bashrc
  
  # User specific aliases and functions
  
  alias rm='rm -i'
  alias cp='cp -i'
  alias mv='mv -i'
  
  # Source global definitions
  if [ -f /etc/bashrc ]; then
  . /etc/bashrc
  fi
  ~
  删除别名的命令为:unalias 别名。
  2)Bash常用快捷键

  快捷键

  作用

  Ctrl+A

  将光标移动到命令行开头,如果输入的命令过长,想要把光标移动到命令行开头时使用

  Ctrl+E

  将光标移动到命令行结尾

  Ctrl+C

  强制终止当前的命令

  Ctrl+L

  清屏,相当于clear命令

  Ctrl+U

  删除或剪切光标之前的命令。输入了一行很长的命令,不用使用退格键一个一个字符的删除,使用这个快捷键更加方便

  Ctrl+K

  删除或剪切光标之后的内容

  Ctrl+Y

  粘贴Ctrl+U或Ctrl+K剪切的内容

  Ctrl+R

  在历史命令中搜索,按下该快捷键后会出现搜索界面,只要输入搜索内容,就会从历史命令中搜索

  Ctrl+D

  退出当前终端

  Ctrl+Z

  暂停,并放入后台,该快捷键牵扯工作管理的内容

  Ctrl+S

  暂停屏幕输出

  Ctrl+Q

  恢复屏幕输出


(3)输入输出重定向
  1)标准输入输出

  设备

  设备文件名

  文件描述符

  类型

  键盘

  /dev/stdin

  0

  标准输入

  显示器

  /dev/stdout

  1

  标准输出

  显示器

  /dev/stderr

  2

  标准错误输出

  2)输出重定向



  类型

  符号

  作用



标准输出重定向


  命令 > 文件

  以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中

  命令 >> 文件

  以追加的方式,把命令的正确输出输出到指定的文件或设备当中

  
  标准错误输出重定向

  错误命令 2> 文件

  以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中

  错误命令 2>> 文件

  以追加的方式,把命令的错误输出输出到指定的文件或设备当中

  
  
  
  
  正确输出和错误输出同时保存

  命令 > 文件 2>&1

  以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中

  命令 >> 文件 2>&1

  以追加的方式,把正确输出和错误输出都保存到同一个文件当中

  命令 &> 文件

  以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中

  命令 &>> 文件

  以追加的方式,把正确输出和错误输出都保存到同一个文件当中

  命令 >> 文件1 2>> 文件2

  把正确输出追加到文件1中,把错误输出追加到文件2中

  例1:向test1文件中写入ls命令 的输出:
  [iyunv@localhost ~]# ls > test1
  [iyunv@localhost ~]# cat test1
  anaconda-ks.cfg
  hello.h
  install.log
  install.log.syslog
  ntfs-3g_ntfsprogs-2014.2.15.tgz
  test1
  testfile
  例2:将date命令的输出追加到test1中:
  [iyunv@localhost ~]# date >> test1
  [iyunv@localhost ~]# cat test1
  anaconda-ks.cfg
  hello.h
  install.log
  install.log.syslog
  ntfs-3g_ntfsprogs-2014.2.15.tgz
  test1
  testfile
  2015年 02月 21日 星期六 04:29:05 CST
  例3:将错误输出写入test2文件中:
  [iyunv@localhost ~]# lis 2>> test2
  [iyunv@localhost ~]# lst >> test2 2>&1
  [iyunv@localhost ~]# date &>> test2
  [iyunv@localhost ~]# cat test2
  -bash: lis: command not found
  -bash: lst: command not found
  2015年 02月 21日 星期六 04:37:31 CST
  注:一般将不需要的输出直接丢进垃圾箱中,其相应的命令为:ls &> /dev/null
  3)输入重定向
  wc命令为统计命令,其格式为:
  wc [选项] [文件名]
  其中,-c选项表示统计字节数,-w选项表示统计单词数,-l选项表示统计行数
  输入重定向一般的格式为:命令 < 文件,表示将文件作为命令输入,如:
  [iyunv@localhost ~]# wc < anaconda-ks.cfg
  54  124 1272

(4)多命令顺序执行与管道符
  1)多命令执行顺序




多命令执行符



格式



作用



;



命令1;命令2


  多个命令顺序执行,命令之间没有任何逻辑联系


&&



命令1&&命令2


  逻辑与,当命令1正确执行,则命令2才会执行,当命令1执行不正确,则命令2不会执行


||



命令1||命令2


  逻辑或,当命令1执行不正确,则命令2才会执行,当命令1正确执行,则命令2不会执行

  例:
  [iyunv@localhost ~]# ls;date;cd /usr/;pwd
  anaconda-ks.cfg  install.log         ntfs-3g_ntfsprogs-2014.2.15.tgz  test2
  hello.h      install.log.syslog  test1                         testfile
  2015年 02月 21日 星期六 04:51:56 CST
  /usr
  dd命令用于磁盘复制或数据复制,其格式为:
  dd if=输入文件 of=输出文件 bs=字节数 count=个数
  其中,if=输入文件指定源文件或源设备,of=输出文件指定目标文件或目标设备,bs=字节数表示一次输入/输出多少个字节,即这些字节看作数据块,count=个数表示输入/输出多少个数据块
  例:向/root/testfile文件中写入/dev/zero的内容,共写入10M,同时显示存取时间:
  [iyunv@localhost usr]# date;dd if=/dev/zero of=/root/testfile bs=1k count=10000;date
  2015年 02月 21日 星期六 05:01:43 CST
  记录了10000+0 的读入
  记录了10000+0 的写出
  10240000字节(10 MB)已复制,1.29893 秒,7.9 MB/秒
  2015年 02月 21日 星期六 05:01:44 CST
  [iyunv@localhost usr]# ll -h /root/testfile
  -rw-r--r--. 1 root root 9.8M 2月  21 05:01 /root/testfile
  注:判定一条命令是否正确执行,可以通过如下命令格式:
  命令 && echo yes || echo no
  2)管道符
  管道符的命令格式为:
  命令1 | 命令2
  表示命令1的正确输出作为命令2的操作对象
  例:使用more命令显示/etc目录下文件的详细信息:
  [iyunv@localhost usr]# ll -a /etc/ | more
  总用量 1796
  drwxr-xr-x. 103 root root  12288 2月  21 03:59 .
  dr-xr-xr-x.  26 root root   4096 2月  21 03:59 ..
  drwxr-xr-x.   3 root root   4096 1月   7 22:12 abrt
  drwxr-xr-x.   4 root root   4096 1月   7 22:22 acpi
  -rw-r--r--.   1 root root     44 2月  17 20:44 adjtime
  ……
  grep命令用于搜索,其命令格式为:
  grep [选项] "搜索内容" 文件名
  其中,-i选项表示忽略大小写,-n选项表示输出行号,-v选项表示反向查找,--color-auto选项表示搜索出的关键字用颜色显示。

(5)通配符与其他特殊符号
  1)通配符

  通配符

  作用

  ?

  匹配一个任意字符

  *

  匹配0个或任意多个字符,也就是匹配任何内容

  []

  匹配中括号中任意一个字符

  [-]

  匹配中括号中任意一个字符,-表示一个范围,如[a-z]代表匹配一个小写字母

  [^]

  逻辑非,表示匹配不是中括号内的一个字符,例如[^0-9]代表一个不是数字的字符

  2)Bash中其他特殊符号

  符号

  作用

  ' '

  单引号,在单引号中所有的特殊符号,如"$"和"`"(反引号)都没有特殊含义

  " "

  双引号,在双引号中特殊符号都没有特殊含义,但是"$"、"`"和"\"是例外,其特殊含义分别为"调用变量的值"、"引用命令"和"转义符"

  ` `

  反引号,反引号括起来的内容是系统命令,在Bash中会先执行它,和$()作用一样,不过推荐使用$(),因为反引号容易看错

  $()

  和反引号作用一样,用来引用系统命令

  #

  在Shell脚本中,#开头的行代表注释

  $

  用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值

  \

  转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出$符号,而不当做变量引用

  例:单引号与双引号:
  [iyunv@localhost usr]# name=ws
  [iyunv@localhost usr]# echo "$name"
  ws
  [iyunv@localhost usr]# echo '$name'
  $name
  [iyunv@localhost usr]# echo "$(date)"
  2015年 02月 21日 星期六 05:29:24 CST
  [iyunv@localhost usr]# echo '$(date)'
  $(date)
  例:反引号:
  [iyunv@localhost usr]# abc=`date`
  [iyunv@localhost usr]# echo $abc
  2015年 02月 21日 星期六 05:31:57 CST
  [iyunv@localhost usr]# abc=$(date)
  [iyunv@localhost usr]# echo "$abc"
  2015年 02月 21日 星期六 05:32:28 CST

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-146970-1-1.html 上篇帖子: 推荐一款 chrome SSH 插件 - Secure Shell 下篇帖子: 苹果Mac OS系统shell命令大全介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表