环境是基于Centos 7.6 1810 版本,本章讲解基础
首先先说下shell与操作系统的关系
shell(壳)是用户与操作系统底层(通常是内核--用来实现上层服务、命令和应用等基本操作,但用户没办法直接控制它)之间交互的中介程序,负责将用户指令、操作传递给操作系统底层,翻译成kernel可以识别的代码
Shell一般分为:图形化Shell(GUI---Graphcal User Interface)、命令行Shell(CLI---Command Line Interface)在实际使用中,Linux中一般默认GUI为:GNOME(The GUN Network Object Mode Environment ---GNU[the GNU’s Not Unix]网络对象模型环境 ),默认CLI为:BASH(Bourne-Again Shell)BASH提示符以#或$起始,#代表当前用户为root用户,$代表当前用户为普通用户
[Linuxcast@Linuixcast ~ ]$ [root@Linuixcast ~ ]#
- 用户名 主机名 目录 提示符 提示符
- 命令的组成部分:命令 参数 命令选项 <--------> Command Option Arguments
- [root@Linuixcast ~ ]#uname -a[--all]
- [root@Linuixcast ~ ]#firefox &
- 在一个命令行中还可以置入多个命令,用分号将各个命令隔开.例如:
- $ ls -F;cp -i mydata newdata
- 也可以在几个命令行中输入一个命令,用反斜杠将一个命令行持续到下一行.
- $ cp –i \
- mydata \
- newdata
- 选项我们可以通过键盘上的Tab按键对命令或文件名进行自动补全,连续按Tab按键两次,可以列出前部的命令或以输入字符开头的命令或文件名,BASH会记录我们以往操作的命令,但不能对参数补齐;可以通过history命令查看使用过的命令,BASH可以通过以下方式调用历史记录以简化操作:
- !! 重复前一个命令,等同于↑键
- !字符 重复前一个以指定字符开头的命令
- !Num 按历史记录序号执行命令
- !?Abc 重复之前包含abc的命令
- !-n 重复之前的第n个命令
- 我们可以通过 ctrl + r 来对历史记录进行搜索查询,先按Esc后再按点调用前一个命令的参数
- 命令su可以切换用户:
- su - 用户名 切换到指定的用户
- su - 切换到root用户,并启用全新的终端,进入root的家目录
- su 切换到root用户,但不启用全新的终端,仍在原来用户目录下
- Sudo 命令 普通用户以管理员的身份运行命令
- 命令passwd可以修改当前用户的密码,当设置的明码太简短或不符合规则则不让你改的,比如密码不能与用户名相同、简单的单词或全数字等;命令id可以显示当前用户的信息;通过在命令后追加一个&,可以将该命令放入后台运行;sleep 时间 可以停止操作时间秒数
- BASH下的通配符:
- * 匹配零个或多个字符;
- ? 匹配任意一个字符 ;
- [0—9] 匹配一个数字范围 ;
- [abc] 匹配列表里任意字符 ;
- [^abc] 匹配列表意外任意字符
- 通过以下命令可以管理后台作业:
- jobs 显示后台作业
- fg 进程号 将后台作业调到前台执行
- bg 进程号 继续执行一个后台作业
- 引号
- 在shell中引号分为三种:单引号,双引号和反引号.
- 单引号 '
- 由单引号括起来的字符都作为普通字符出现.特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释.例如:
- $ string='$PATH'
- $ echo $string
- $PATH
- $
- 可见$保持了其本身的含义,作为普通字符出现.
- 双引号 "
- 由双引号括起来的字符,除$、\、'、和"这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待.对于$来说,就是用其后 指定的变量的值来代替这个变量和$;对于\而言,是转义字符,它告诉shell不要对其后面的那个字符进行特殊处理,只当作普通字符即可.可以想见,在双 引号中需要在前面加上\的只有四个字符$,\,'和"本身.而对"号,若其前面没有加\,则Shell会将它同前一个"号匹配.
- 例如,我们假定PATH的值为.:/usr/bin:/bin,输入如下命令:
- $ TestString="$PATH\\\"\$PATH"
- $ echo $TestString
- .:/usr/bin:/ bin\"$PATH
- $
- 读者可以自己试一下在第二个双引号之前不加\会产生什么结果.
- 反引号 `
- 反引号(`)这个字符所对应的键一般位于键盘的左上角,不要将其同单引号(')混淆.反引号括起来的字符串被shell解释为命令行,在执行时,shell
执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分.例如:
- $ pwd
- /home/xyz
- $ string="current directory is `pwd`"
- $ echo $string
- current directour is /home/xyz
- $
- shell执行echo命令时,首先执行`pwd`中的命令pwd,并将输出结果/home/xyz取代`pwd`这部分,最后输出替换后的整个结果.
- 利用反引号的这种功能可以进行命令置换,即把反引号括起来的执行结果赋值给指定变量.例如:
- $ today=`date`
- $ echo Today is $today
- Today is Mon Apr 15 16:20:13 CST 1999
- $
- 反引号还可以嵌套使用.但需注意,嵌套使用时内层的反引号
用反斜线(\)将其转义.例如:$ abc=`echo The number of users is \`who| wc-l\``
- $ echo $abc
- The number of users is 5
- $
- 在反引号之间的命令行中也可以使用shell的特殊字符.Shell为得到``中命令的结果,它实际上要去执行``中指定的命令.执行时,命令中的特殊字符,如$,",?等又将具有特殊含义,并且``所包含的可以是任何一个合法的Shell命令,如:
- $ ls
- note readme.txt Notice Unix.dir
- $ TestString="`echo $HOME ` ` ls [nN]*`"
- $ echo $TestString
- /home/yxz note Notice
- $
- 其他情况,读者可自行试之.
- 注释符
- 在shell编程中经常要对某些正文行进行注释,以增加程序的可读性.在Shell中以字符"#"开头的正文行表示注释行.
COMMENTS | NOTHING