我是靠谱客的博主 震动皮皮虾,最近开发中收集的这篇文章主要介绍csh shell_Linux中shell基础、重定向、管道符、环境变量,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、什么是shell

  Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口(命令解释器)。它接收用户输入的命令并把它送入内核去执行。起着协调用户与系统的一致性和在用户与系统之间进行交互的作用。

  Shell在Linux系统上具有极其重要的地位

ab7682a5e38afc71490823581ea52e24.png

2、命令解释过程

  Shell可以执行:内部命令、应用程序、shell脚本

2ee02707c43dbedd93c433ec48c550d6.png

3、Shell的种类

  常见的各种版本的shell:

Bash(Bourne Again Shell)

bash是大多数Linux系统的默认Shell。bash与bsh完全向后兼容,并且在bsh的基础上增加和增强了很多特性。bash也包含了很多C Shell和Korn Shell中的有点。bash有很多灵活和强大的变成接口,同时又有很友好的用户界面。

Ksh(Korn Shell)

Korn Shell(ksh)由Dave Korn所写。它是UNIX系统上的标准Shell。在Linux环境下有一个专门为Linux系统写的Korn Shell的扩展版本,即Public Domain Korn(pdksh)

tcsh(csh 的扩展) tcsh是C Shell的扩展。tcsh与csh完全向后兼容,但它包含了更多的使用户感觉方便的新特性。其最大的提高是在命令行编辑和历史浏览方面。

4、Linux的元字符

  在Shell中有一些具有特殊意义的字符,称为Shell 元字符(shell metacharacters)。

  若不以特殊方式(使用转义字符)指明,Shell 并不会把它们当作普通文字符使用。

7c285ebf25620e0c769240265ea304c7.png

5、Bash的基本功能

  历史命令(history)

  命  令:history 命令可以用来显示曾执行过的命令,也可以根据显示的治疗来重新执行需要的命令

  语  法:history(选项)(参数)

  选  项:n 显示n个最近的记录

  参  数:-a 添加记录

       -r 读取记录,但不会添加内容记录

       -w 覆盖原有的history 文件

       -c 清除记录

       -d[n] 删除指定n条记录

       -n 读取指定文件

       -r 读取文件但不记录

       -w 覆盖原有文件

  使用上下箭头---调用以前的历史命令

  使用 "!n" 的方式---重复执行第n条历史命令

  使用 "!!" 的方式---重复执行上一条命令

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

  使用 "!$" 的方式---重复执行上一条命令的最后一个参数

166d20806387508bc8d49cb33f6fb147.png

  历史命令存放在当前用户家目录下的 .bash_history 隐藏文件中。

8c3a2935fe562b1fbdfef5042d373d02.png

  .bash_history 文件存放命令是在系统退出时写入的,在下次登录后能查到上次操作所用到的命令。如果使用 history -w 表示将缓存中的命令立即写入历史文件中。

28e5b8026e741d6052712b94da2cd95d.png

  history 命令查看的历史命令可以用 history -c 进行删除,但是.bash_history 文件的内容是需要通过 vim 编辑器进入文件中删除,或者使用重定向删除(echo > /root/.bash_history )。

  bash中常用的快捷键

  移动:

  Ctrl+A:  移动到当前编辑的命令行首

  Ctrl+E:  移动到当前编辑的命令行尾

  Ctrl+F 或 -> :按字符右移(往命令行尾部方向,前移)

  Ctrl+B 或

  Alt+F:  按单词右移(往命令行尾部方向,前移)

  Alt+B:  按单词左移(往命令行尾部方向,后移)

  编辑:

  Ctrl+D:退出终端,等价于exit

  Ctrl+U:  删除光标左边的所有字符串

  Ctrl+K:  删除光标右边的所有字符串

  Ctrl+L:  相当于clear命令---清屏

  Ctrl+C:  强行终止当前操作

6、重定向

  6.1、标准输入输出

  执行一个shell 程序时通常会自动打开三个标准文件

  标准输入(STDIN,文件描述符为0):通常对应终端的键盘,也可以从其他文件或命令或者文件内容中输入。

  标准输出(STDOUT,文件描述符为1):默认输出到屏幕。

  错误输出(STDERR,文件描述符为2):默认输出到屏幕

  文件名称(filename,文件描述符为3+)

  进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。进程使用文件描述符(file descriptors)来管理打开的文件。

72da27db570391cece48ae540ac1f130.png

  6.2、输入重定向

  输入重定向:是指不适用系统提供的标准输入端口,进行重新的指定。换言之,输入重定向就是不适用标准输入端口输入文件,二十使用指定的文件作为标准输入设备。(重定向简单理解就是使用 "

  语法1:command < file

315ac56af0faa7ea28febc66ca548c53.png

  cat /etc/passwd 它是以键盘作为标准输入设备,并将文件内容显示到控制台

  而输入重定向 cat < /etc/passwd 是将passwd文件指定为输如设备,并将内容显示到控制台。

  语法2:command << file

d76fe2b88ddf30b602cc142f6bfc9e0e.png

  cat << file (这个字符串字符是任意的,没有任何含义),他的作用是将file 字符之间的内容(document)作为输入传递给cat 碰到file 将自动结束输入,并将输入的内容显示出来;

  语法3:cat /root/aa < a.txt >b.txt :将文件passwd输入重定向到 a.txt,输出重定向到 b.txt 文件

129017fdf7afdad11ccb077c2c2043c5.png

  6.3、输出重定向

  在Linux中,默认的标准输出设备是控制台(或称为显示器),用户输出的信息默认情况下都会显示到控制台。

  比如:cat /etc/aa.txt,它是使用控制台显示内容。默认情况下,标准输出设备是控制台,所以cat命令将文件信息输出到控制台,但是,我们可以使用 ">" 修饰符修改标准输出设备,使用指定的文件作为标准输出设备,来显示文件。输出重定向的概念就出现了。

  3.1、对于两个终端 /dev/pts/0 /dev/pts/1

1a43003f2c02610a2683b8163141feb1.png

  在设备 /dev/pts/0 给设备 /dev/pts/1 发出 Hello!,那么在 /dev/pts/1 设备上就能显示 /dev/pts/0发过来的消息。

  命令:echo Hello! > /dev/pts/1

38eb5c9053ca7533c612250f8645080e.png

  使用重定向将查询的文件信息发送到其他控制台,在其他控制台就能接收到信息。

b74412595df6ad96e7d0f674a5f21793.png

  3.2、标准输出重定向(覆盖)

  命令:echo > aa

  标准输出重定向,先清空后写入,如果文件不存在则创建,echo后面没有接内容,则是清空文件。

4ce776016b3684541a8205fd934ace86.png

  3.3、标准输出重定向(追加)

  命令:echo "但是在冬季之后迎来的是春暖花开" >> aa

  标准追加输出重定向,想配置文件末尾追加内容

2af9b67584393ae90871ed4b952f1266.png

  3.4、禁止覆盖

  如果在工作中,我们想要在文件中追加内容时 ">>",却不小心写入 ">" 就执行了,那么我们的我呢见就覆盖了,这时候就需要禁止覆盖了,命令:set -C

3e5ff167c0d261c7c417db78420ad438.png

  强制覆盖 ">|"

07a6708b06cec10d07f79a02d358832b.png

  禁止覆盖命令:set -C ,解除禁制覆盖命令:set +C

  3.5、错误输出从定向

  命令:ls /root /error 1>a 2>b

  将标准输出和标准错误输出从定向到不同文件

2dc02eec31ec40fc900bdcc49df1ff1a.png

  3.6、正确和错误都输入到相同位置

  命令:find /root -name "*.txt" &>ab

  将标准输出和标准错误输出重定向到同一个文件,混合输出

c3365b799767e5a9d4f406acd56ec5ff.png

  命令:cat a aa > ab

  合并两个文件内容至一个文件

276b80aafc9e2b6d9b8de068bb5a1d0e.png

  3.7、重定向到空设备/dev/null    

  命令:ls /root /error >ab 2>/dev/null

  空设备,即将产生的输出丢掉 

8f30713e8e4e13e1700501a40233b776.png

  如果 /dev/null 设备被删除

  命令:rm -f /dev/null //删除/dev/null设备

  1、手动创建

  命令:mkmod -m 666 /dev/null c 1 3

  2、重启自动创建

7、进程管道技术

  管道操作符号 "|" 连接左右两个命令,将右侧的命令的标准输出,交给右侧命令的标准输入

de9ee0c04c696d4827466888af493c55.png

  格式:cmd1 | cmd2 [...|cmdn]

  将/etc/passwd 中的用户按UID大小排序

  命令:sort -t ":" -k3 -n /etc/passwd -r | head

c13bcd271314746600e8cc7ee47ec543.png

  命令:ip a|grep 'inet ' | awk '{print $2}' | awk -F "/" '{print $1}'

  查看本地IP,打印以 "inet "开头的行,以空格为分隔符截取第二段(默认以空格为分隔符),再以 "/" 为分隔符截取第一段。

aa8ca0b5931d7848bf34b2b3d604e861.png
d2cb25e682525fd5a0b9c9bdcb62e03c.png
d15435b81371f07a1f0c50347acaa1a5.png

  7.1、tee 管道技术

  功能:tee 指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件或显示。

20ccae6002b5cc9f506897a5f38d5b58.png

  命令:ip a|grep 'inet '|tee ip.txt | awk '{print $2}' | awk -F "/" '{print $1}'

  将前一个程序产生的结果保存在指定文件中,并送至下一个程序。

6a279197996d246fc8f6cc434eb84e5f.png

  7.2、参数传递 xargs

  功能:将参数列表转换成小块分段传递给其他命令,读入stdin的数据转换为参数添加至命令行中,让一些不支持管道的命令可以使用管道。

  有些命令不支持管道技术,但是可以通过xargs来实现

ebefd6ace7de4b95466c806013b830ed.png

8、shell 环境变量

  1)环境变量定义shell的运行环境,保证shell 命令的正确执行;

  2)Shell 用环境变量类确定查找路线、注册目录、终端类型、终端名称、用户名等;

  3)所有环境变量都是全局变量(既可以传递给Shell 的子进程)。

  8.1、常见的Shell 环境变量

变量名含义HOME用户主目录LOGNAME登录名USER用户名、与登录名相同PWD当前目录/工作目录名MAIL用户的邮箱路径名HOSTNAME计算机的主机名INPUTRC默认的键盘映像SHELL用户所使用的shell的路径名LANG默认语言HISTSIZEhistory所能记住的命令的最多个数PATHshell查找用户输入命令的路径(目录列表)PS1、PS2shell一级、二级命令提示符

  8.2、查看环境变量

  Linux中set、env和 export 都可以查看环境变量

  1)set 命令显示当前shell 的变量,包括当前用户的变量,set 主要用来显示shell 的参数和选项

  2)env 命令显示当前用户的变量,env 用来再构建的幻剑中运行命令

  3)export 命令显示当前导出成用户变量的shell 变量

  每个shell 都有自己特有的变量(set显示的变量),这个和用户变量不同,当前用户变量和你用什么shell 无关,不管你用神那么shell 都在,比如HOME、SHELL等这些变量;但是shell 自己的变量不同,不如BASH_ARGC、BASH等这些变量只有set 才会显示,时bash特有的;export 不加参数的时候,显示哪些变量被导出了用户变量,因为一个shell自己的变量可以通过 export "导出"变成一个用户变量。

  8.3、Linux下环境变量的设置

  8.3.1、新建 /root/test/aa.sh 文件,并赋于可执行权限

ec2c8ec94eeffb106e4d0d6c8c605549.png
7207d5342062ce8217fb6f2d25b2b1d1.png
af6146812e12755799da3f04640cb7c5.png

  自定义命令脚本,只需要把脚本目录添加到环境变量中,就可以在任意目录下执行该脚本。

  8.3.2、定义系统提示符的变量

  PS1:定义系统提示符的变量

  d:显示日期,格式为“星期 月 日”

  h:显示简写主机名。默认主机名“localhost”

  :显示24小时制时间,格式为"HH:MM:SS"

  T:显示12小时制时间,格式为"HH:MM:SS"

  A:显示12小时制时间,格式为"HH:MM"

  u:显示当前用户名

  w:显示当前所在目录的完整名称

  W:显示当前所在目录的最后一个目录

  #:执行的第几个命令

  $:提示符。如果时root用户会显示为"#",如果时普通用户显示"$"

  如:PS1='[u@h w]$' //将W改成小写

23c6c535144b447a7c75d1939d75c0b3.png

  8.3.4、预定义变量

预定义变量作用$?

最后一次执行的命令的返回状态。如果这个变量的值为0,

证明上一个命令正确执行;如果这个变量的值为非0(具体时那个数,

由命令自己来决定),则证明上一个命令执行不正确了。

$$当前进程的进程号(PID)$!后台运行的最后一个进程的进程号(PID)

47c361a406b765505518acd647766672.png

  8.3.5、用户工作环境

  用户登录系统时,shell 为用户自动定义唯一的工作环境并对该环境进行维护直至用户注销。该环境将定义如身份、工作场所和正在运行的进程的特性。这些特性由指定的环境变量值定义。

  用户工作环境分为登录环境和非登录环境:1、登录环境是指用户登录系统时的工作环境,此时的shell 对登录环境而言时主shell;2、非登录环境是指用户在调用子shell 时所使用的用户环境。

  设置用户工作环境

  对所有用户惊醒设置:

    /etc/profile

    /etc/bashrc

  只对当前用户进行设置

    ~/.bash_profile

    ~/.bashrc

  通常,个人bash 环境设置都定义在~/.bashrc文件里。

转载自:https://www.cnblogs.com/qiuyu666/p/11943852.html

最后

以上就是震动皮皮虾为你收集整理的csh shell_Linux中shell基础、重定向、管道符、环境变量的全部内容,希望文章能够帮你解决csh shell_Linux中shell基础、重定向、管道符、环境变量所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部