Shell 基础概括

Shell是什么?

shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至是编写一些程序。

shell 还是一个功能强大的编程语言,易编写,易调试,灵活性强。shell是解释型的脚本语言。在shell中可以直接调用Linux系统命令。

Shell的分类

  • Bourne Shell:从1979年起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh。

  • C Shell:C Shell 主要在BSD版的Unix系统中使用,其语法和C语言相类似而得名。

  • Shell 的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh、ksh、Bash、psh、zsh;C家族主要包括:csh、tcsh。

  • Bash:Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell

Linux 支持的Shell

  • 查看/etc/shells文件,可以查看linux支持的shell类型

范例:

[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
[root@localhost ~]#

Shell脚本的执行方式

echo 输出命令

命令格式

echo [选项] [输出内容]

选项

  • -e :支持反斜线控制的字符转换

范例:

# 输出制表符、换行符
[root@localhost ~]# echo -e 'a\tb\tc\nd\te\tf'
a    b    c
d    e    f
[root@localhost ~]# # 输出颜色 \e[1; 代表开启颜色输出
# \e[0m 代表结束颜色输出
# 常用的颜色 30m=黑色,31m=红色,32m=绿色,
# 33m=黄色,34m=蓝色,35m=洋红,36m=青色,37m=白色
[root@localhost ~]# echo -e "\e[1;31m abcd \e[0m"abcd # 红色
[root@localhost ~]#

第一个脚本

范例:


[root@localhost ~]# vim hello.sh
#!/bin/Bash    # 并不是注释,标称下面的是shell脚本
#The first program
#Author:dyh(E-mail:jiejie_yh@163.com)echo -e "\e[1;35m hello world \e[0m"

执行:

1.给脚本赋予执行权限,然后用相对路径或绝对路径执行

[root@localhost ~]# ll总用量 12-rw-------. 1 root root 1262 7月  25 18:59 anaconda-ks.cfg-rw-r--r--. 1 root root  107 7月  29 22:13 hello.sh-rw-r--r--. 1 root root    9 7月  28 11:59 test.txt[root@localhost ~]# chmod 755 hello.sh [root@localhost ~]# ./hello.sh hello world [root@localhost ~]# /root/hello.sh hello world

2.通过bash调用脚本执行(该方式不需要执行权限)

    [root@localhost ~]# bash hello.sh hello world [root@localhost ~]#

命令:dos2unix

用于在windows中编写shell脚本格式转换成unix格式。

Bash的基本功能

历史命令与命令补全

历史命令

命令格式:

history [选项] [历史命令保存文件]

选项:

  • -c:清空历史命令

  • -w:把缓存中的历史命令写入历史命令保存文件~/.bash_history

范例:

[root@localhost ~]# ll .bash_history
-rw-------. 1 root root 15053 7月  29 21:28 .bash_history
[root@localhost ~]# pwd
/root
[root@localhost ~]# history -w
[root@localhost ~]# cat .bash_history
passwd -l jiejie
vim /etc/shadow
passwd -u jiejie
vim /etc/shadow
passwd -l yh
passwd -u yh
echo "12345" | passwd --stdin user1
echo "12345"|passwd --stdin user1
echo "123456"|passwd --stdin jiejie
vim /etc/shadow
clear
...[root@localhost ~]# history -c
[root@localhost ~]# history 1  history
[root@localhost ~]#

历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改。

历史命令的调用:

  • 可以使用键盘中的上下箭头调用以前的历史命令

  • 使用!n 重复执行第n条历史命令

  • 使用!! 重复执行上一条命令

  • 使用!字符串重复执行最后一条以该字符串开头的命令

范例:

[root@localhost ~]# history
1  history
2  vim /etc/profile
3  history
[root@localhost ~]# !2
vim /etc/profile
[root@localhost ~]# !!
vim /etc/profile
[root@localhost ~]# service httpd restart
Redirecting to /bin/systemctl restart  httpd.service
[root@localhost ~]# !ser
service httpd restart
Redirecting to /bin/systemctl restart  httpd.service
[root@localhost ~]#

命令的别名与常用快捷键

命令别名

命令格式:


# 设定命令别名
alias 别名=‘原命令’
# 查询命令别名
[root@localhost ~]# alias

范例:

[root@localhost ~]# alias vi='vim'
[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@localhost ~]#

命令执行时顺序

  1. 第一顺位执行用绝对路径或相对路径执行的命令

  2. 第二顺位执行别名

  3. 第三顺位执行Bash的内部命令

  4. 第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令

让别名永久生效

上面提到的用命令设置别名的方式只会临时生效,如果需要让别名永久生效,需要写入文件/root/.bashrc

删除别名

[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@localhost ~]# unalias vi
[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@localhost ~]#

Bash常用快捷键

快捷键 作用
Ctrl+A 把光标移动到命令行开头。
Ctrl+E 光标移动到命令行结尾
Ctrl+C 强制终止当前的命令
Ctrl+L 清屏,相当于clear命令
Ctrl+U 删除或剪切光标之前的命令
Ctrl+K 删除或剪切光标之后的内容
Ctrl+Y 粘贴Ctrl+UCtrl+K剪切的内容
Ctrl+R 在历史命令中搜索
Ctrl+D 退出当前终端
Ctrl+Z 暂停,并放入后台
Ctrl+S 暂停屏幕输出
Ctrl+Q 回复屏幕输出

输入输出重定向

输出重定向

类型 符号 作用
标准输出重定向 命令 > 文件 以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中。
标准输出重定向 命令 >> 文件 以追加的方式,把命令的正确输出输出到指定的文件或设备当中。
标准错误输出重定向 错误命令 2> 文件 以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中。
标准错误输出重定向 错误命令 2>> 文件 以追加的方式,把命令的错误输出输出到指定的文件或设备当中。
正确输出和错误输出同时保存 命令 > 文件 2>&1 以覆盖的方式,把命令的正确输出和错误输出保存到同一个文件中。
正确输出和错误输出同时保存 命令 >> 文件 2>&1 以追加的方式,把命令的正确输出和错误输出保存到同一个文件中。
正确输出和错误输出同时保存 命令 &>文件 以覆盖的方式,把命令的正确输出和错误输出保存到同一个文件中。
正确输出和错误输出同时保存 命令 &>>文件 以追加的方式,把命令的正确输出和错误输出保存到同一个文件中。
正确输出和错误输出同时保存 命令 >>文件1 2>>文件2 把正确的输出追加到文件1中,把错误的输出追加到文件2中

范例:


# 标准输出重定向
[root@localhost ~]# ls > abc
[root@localhost ~]# cat abc
abc
anaconda-ks.cfg
hello.sh
test.txt
[root@localhost ~]# date
2017年 07月 30日 星期日 00:35:29 CST
[root@localhost ~]# date > abc
[root@localhost ~]# cat abc
2017年 07月 30日 星期日 00:35:38 CST
[root@localhost ~]# date >> abc
[root@localhost ~]# cat abc
2017年 07月 30日 星期日 00:35:38 CST
2017年 07月 30日 星期日 00:36:12 CST
[root@localhost ~]## 标准错误输出重定向
[root@localhost ~]# lst 2>> abc
[root@localhost ~]# cat abc
2017年 07月 30日 星期日 00:35:38 CST
2017年 07月 30日 星期日 00:36:12 CST
-bash: lst: 未找到命令
[root@localhost ~]## 正确输出和错误输出同时保存
[root@localhost ~]# lst >> bcd 2>&1
[root@localhost ~]# cat bcd
-bash: lst: 未找到命令
[root@localhost ~]#[root@localhost ~]# date &>>cde
[root@localhost ~]# cat cde
2017年 07月 30日 星期日 00:48:27 CST
[root@localhost ~]# datesf &>>cde
[root@localhost ~]# cat cde
2017年 07月 30日 星期日 00:48:27 CST
-bash: datesf: 未找到命令
[root@localhost ~]# [root@localhost ~]# ls &>>/dev/null # 特殊文件,不存在,垃圾箱。不保存任何数据[root@localhost ~]# ls >> def 2>>efg
[root@localhost ~]# cat def
abc
anaconda-ks.cfg
bcd
cde
def
efg
hello.sh
test.txt
[root@localhost ~]# cat efg
[root@localhost ~]#

输入重定向

命令格式:


wc [选项] [文件名]

选项:

  • -c:统计字节数

  • -w:统计单词数

  • -l:统计行数

范例:

[root@localhost ~]# wc
1111111 22221  12
12323
343
124       6      31
[root@localhost ~]#[root@localhost ~]# wc < abc 3  15 114
[root@localhost ~]# [root@localhost ~]# wc <<hello
> ksdfk
> 12
> 324
> 34543
> hello4  4 19
[root@localhost ~]#

多命令顺序执行与管道符

多命令顺序执行

多命令执行符号 格式 作用
; 命令1; 命令2 多个命令顺序执行,命令之间没有任何逻辑联系
&& 命令1&&命令2 逻辑与。当命令1正确执行,则命令2才会执行。当命令1执行不正确,则命令2不会执行
|| 命令1|| 命令2 逻辑或。当命令1执行不正确,命令2才会执行。当命令1正确执行,则命令2不会执行

范例:

[root@localhost ~]# ls;date;cd /user;pwd
abc  anaconda-ks.cfg  bcd  cde  def  efg  hello.sh  test.txt
2017年 07月 30日 星期日 01:30:26 CST
-bash: cd: /user: 没有那个文件或目录
/root
[root@localhost ~]#

dd 命令

dd命令是linux中进行磁盘复制或者说数据复制,cp命令只能复制文件,dd命令能复制特殊命令、特殊文件,甚至整个硬盘。不光复制分区或者硬盘的数据,也能复制分区或者硬盘的文件系统。

命令格式:

dd if=输入文件 of=输出文件 bs=字节数 count=个数

选项:

  • if=输入文件 指定源文件或源设备

  • of=输出文件 指定目标文件或目标设备

  • bs=字节数 指定一次输入/输出多少字节,即把这些字节看做一个数据块

  • count=个数 指定输入/输出多少个数据块

范例:


[root@localhost ~]# date;dd if=/dev/zero of=/root/testfile bs=1k count=100000;date
2017年 07月 30日 星期日 01:40:11 CST
记录了100000+0 的读入
记录了100000+0 的写出
102400000字节(102 MB)已复制,0.195148 秒,525 MB/秒
2017年 07月 30日 星期日 01:40:11 CST[root@localhost ~]# ll -h
总用量 98M
-rw-r--r--. 1 root root  114 7月  30 00:38 abc
-rw-------. 1 root root 1.3K 7月  25 18:59 anaconda-ks.cfg
-rw-r--r--. 1 root root   42 7月  30 00:47 bcd
-rw-r--r--. 1 root root   74 7月  30 00:48 cde
-rw-r--r--. 1 root root   54 7月  30 01:09 def
-rw-r--r--. 1 root root    0 7月  30 01:09 efg
-rwxr-xr-x. 1 root root  107 7月  29 22:22 hello.sh
-rw-r--r--. 1 root root  98M 7月  30 01:40 testfile
-rw-r--r--. 1 root root    9 7月  28 11:59 test.txt
[root@localhost ~]#

管道符

命令格式:

# 命令1的正确输出作为命令2的操作对象
命令1 | 命令2

范例:

[root@localhost ~]# ll -a /etc | more
总用量 1236
drwxr-xr-x. 78 root root     8192 7月  29 23:01 .
dr-xr-xr-x. 19 root root      262 7月  28 12:04 ..
-rw-r--r--.  1 root root       16 7月  25 18:58 adjtime
-rw-r--r--.  1 root root     1518 6月   7 2013 aliases
-rw-r--r--.  1 root root    12288 7月  25 19:06 aliases.db
drwxr-xr-x.  2 root root      236 7月  25 18:51 alternatives
-rw-------.  1 root root      541 3月  31 2016 anacrontab
-rw-r--r--.  1 root root       55 11月  5 2016 asound.conf
drwxr-x---.  3 root root       43 7月  25 18:51 audisp
drwxr-x---.  3 root root       83 7月  25 19:05 audit
drwxr-xr-x.  2 root root       22 7月  25 18:51 bash_completion.d
-rw-r--r--.  1 root root     2853 11月  6 2016 bashrc
drwxr-xr-x.  2 root root        6 11月  7 2016 binfmt.d
-rw-r--r--.  1 root root       38 11月 30 2016 centos-release
-rw-r--r--.  1 root root       51 11月 30 2016 centos-release-upstream
drwxr-xr-x.  2 root root        6 11月  6 2016 chkconfig.d
-rw-r--r--.  1 root root     1165 11月 15 2016 chrony.conf
-rw-r-----.  1 root chrony     62 7月  25 19:05 chrony.keys
drwxr-xr-x.  2 root root       21 7月  25 18:50 cron.d
drwxr-xr-x.  2 root root       57 7月  26 23:14 cron.daily
-rw-------.  1 root root        0 3月  31 2016 cron.deny
drwxr-xr-x.  2 root root       22 6月  10 2014 cron.hourly
--More--[root@localhost ~]# netstat -an | grep ESTABLISHED
tcp        0      0 192.168.60.188:22       192.168.60.235:57322    ESTABLISHED
udp        0      0 192.168.60.188:50066    85.199.214.100:123      ESTABLISHED
udp        0      0 192.168.60.188:35766    193.228.143.23:123      ESTABLISHED
udp        0      0 192.168.60.188:34918    85.199.214.101:123      ESTABLISHED

grep 命令

命令格式:

grep [选项] "搜索内容" 文件名

选项:

  • -i:忽略大小写

  • -n:输出行号

  • -v:反向查找

  • --color=auto 搜索出的关键字用颜色显示

范例:

[root@localhost ~]# grep 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# grep -n --color=auto "root" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# grep -i --color=auto "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# grep -i --color=auto "ROot" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]#[root@localhost ~]# netstat -an | grep ESTABLISHED
tcp        0      0 192.168.10.217:22       192.168.10.238:63332    ESTABLISHED
udp        0      0 192.168.10.217:57794    193.228.143.23:123      ESTABLISHED
[root@localhost ~]#

通配符与其它特殊符号

通配符

通配符 作用
? 匹配任意一个通配符
* 匹配0个或任意多个任意字符
[] 匹配括号中任意一个字符。例如:[abc]代表一定匹配一个字符,a/b/c中的其中一个
[-] 匹配中括号中任意一个字符,-代表一个范围例如:[a-z]
[^] 逻辑非,表示匹配不是中括号内的一个字符。例如:1

范例

[root@localhost ~]# cd /tmp/
[root@localhost tmp]# ll
总用量 12
-rw-rw-r--. 1 yh   yh      0 7月  27 00:01 a
-rwx------. 1 root root  836 7月  25 18:59 ks-script-7AxIKHhttpd.service-RMis7k
drwxrwsrwx. 2 root root   28 7月  28 08:53 test
-rw-------. 1 root root    0 7月  25 18:47 yum.log
[root@localhost tmp]# rm -rf *
[root@localhost tmp]# ll
总用量 0
[root@localhost tmp]# touch abc
[root@localhost tmp]# touch abcd
[root@localhost tmp]# touch 012
[root@localhost tmp]# touch 0abc
[root@localhost tmp]# ls ?abc
0abc
[root@localhost tmp]# ls [0-9]*
012  0abc
[root@localhost tmp]# ls [^0-9]*
abc  abcd
[root@localhost tmp]#

Bash中其他特殊符号

通配符 作用
'' 单引号。在单引号中所有的特殊符号,如“$”和“`”都没有特殊含义
"" 双引号。在双引号中特殊符号都没有特殊含义,但是“$”、“`”和“”例外,拥有“调用变量的值”、“引用命令”和”转义符“的特殊含义
`` 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和$()作用一样
$() 和反引号作用一样,用来引用系统命令
# 在Shell脚本中,#代表注释
$ 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值
\ 转义符,跟在之后的特殊符号将失去特殊含义。如&dollar;将输出"$"符号,而不当做变量引用

范例:

[root@localhost tmp]# name=yh
[root@localhost tmp]# echo '$name'
$name
[root@localhost tmp]# echo "$name"
yh
[root@localhost tmp]# echo '$(date)'
$(date)
[root@localhost tmp]# echo "$(date)"
2017年 07月 30日 星期日 06:12:34 CST
[root@localhost tmp]# echo "`date`"
2017年 07月 30日 星期日 06:12:44 CST
[root@localhost tmp]# echo '`date`'
`date`
[root@localhost tmp]#

  1. 0-9 ↩

Shell 基础知识--细说linux配套视频相关推荐

  1. 细说linux视频,Shell变量-细说linux配套视频

    变量基础概念 变量分类 环境变量:这种变量中主要保存的是和系统操作环境相关的数据. 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的. 预定义变量:是Ba ...

  2. Linux之(5)账户和shell基础知识

    Linux之(5)账户和shell基础知识 Author:onceday date:2022年8月23日 漫漫长路,而今才刚刚开始- 本内容主要收集整理于: <Linux命令行与shell脚本编 ...

  3. 【图文教程】Shell基础知识

    Shell基础知识 1. shell介绍 2. history命令 history主要参数示例: 3. 命令补全和别名 4. 通配符 5. 输入输出重定向 6. 管道符和作业控制 管道符: 作业控制: ...

  4. 3000字扫盲shell基础知识(新手必备)

    目录 shell基础语法之变量 shell 变量命名 shell 变量调用 shell 变量分类 shell 运算符 运算符种类 关系运算符 布尔运算符 字符串运算符 逻辑运算符 文件测试运算符 sh ...

  5. DNS 基础知识及 Linux DNS 服务器操作知识

    一.DNS域名结构与域名服务器 域名系统DNS(Domain Name System)是因特网使用的命名系统,用来把便于人们使用的机器名字转换成为IP地址.域名系统其实就是名字系统.为什么不叫&quo ...

  6. eip协议通信_工业通讯 | EtherNET/IP协议基础知识(Part 3)||附视频讲解

    点击蓝字 关注我们 相关阅读: EtherNet/IP OSI参考模型及其物理层.数据链路层与网络层的功能特点: EtherNET/IP协议基础知识(Part 1)||附视频讲解 Encapsulat ...

  7. linux 运行class文杰,Linux Shell基础知识,你想的到的都在这里

    小编提示:此篇文章阅读时间为15分钟左右,可先收藏后阅读. 01/Linux 的江湖地位 Linux 作为一个全球用户超过14亿的操作系统,它的强大与神奇就不必多说了,混在IT界 Linux是可以装B ...

  8. shell基础知识总结

    1. shell 对于一台计算机而言,其硬件受系统内核的控制,使用者想要控制计算机,就必须有与系统内核进行通讯的手段.而shell就是使用者与计算机进行通讯的手段之一.从命名上看,shell其实是相对 ...

  9. Linux基础知识--2.Linux的文件系统和bash的基础特性(1)

    Linux基础知识--linux的文件系统和bash的基础特性 一.Linux文件系统: Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux ...

最新文章

  1. R语言可视化学习笔记之相关矩阵可视化包ggcorrplot
  2. PHP(十二)文件操作
  3. Error:Java home supplied via 'org.gradle.java.home' is invalid
  4. python入门教程 官方-Python 入门指南
  5. nacos 集群_Nacos 常见问题及解决方法
  6. 微软任务管理软件 Planner,Office 365 用户免费用
  7. css3双击点赞动画,Twitter上的点赞动画
  8. .NET西安社区 [拥抱开源,又见 .NET] 第二次活动简报
  9. C语言结构体用法很多,坑也很多
  10. linux 统计当前目录下文件或者文件夹的数量
  11. 10038 mysql,关于MySql 10038错误的完美解决方法(三种)
  12. 鸿蒙轻内核源码分析:MMU协处理器
  13. 679. 24 点游戏
  14. 关于解决keil4和mdk共存后51不能使用go to definition Of 'XXXXXX'问题
  15. ROS 2 Crystal Clemmys版机器人操作系统补充说明
  16. 15个提高编程技巧的 JavaScript工具
  17. Excel表格模板打包下载┆收集了各类各行业Excel表格、word模板
  18. 智能体脂秤方案——什么是体脂?
  19. 码流 | 码率 | 比特率 | 帧速率 | 分辨率 | 高清的区别
  20. keydown、input、keyup

热门文章

  1. Doc命令之 cd,(跳转到别的盘符)。
  2. 解决无法连接mysql问题
  3. C++(八)— 死锁原因及解决方法
  4. EXP-00056遇到Oracle错误1455问题解决办法
  5. 关于System.AccessViolationException异常
  6. 第一次使用pyqt5解决的几个小问题
  7. 删除StringBuilder的最后一个字符?
  8. Python中的字符串比较:与== [重复]
  9. 编译用于高放射性环境的应用程序
  10. 如何在Node.js中处理POST数据?