260 likes | 550 Views
Shell 基础知识. 乐山师范学院计科系 张 波. ※ LSTC. 什么是 Shell ?. Linux. Shell 是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。 Shell 是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。 Shell 有自己的编程语言,允许用户编写由 shell 命令组成的程序。 Shell 类似高级语言编程。用这种编程语言编写的 Shell 程序与其他应用程序具有同样的效果。. ※ LSTC. Linux 中中常见的 Shell. Linux.
E N D
Shell 基础知识 乐山师范学院计科系 张 波 ※ LSTC
什么是Shell ? Linux Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。 Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。Shell有自己的编程语言,允许用户编写由shell命令组成的程序。Shell类似高级语言编程。用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。 ※LSTC
Linux中中常见的Shell Linux • 修改登陆的shell:chsh 常用的shell(默认)/bin/bash 可以使用的常见的shell : bash "Bourne Again" shell sh 在很多UNIX下是标准的shell csh C shell,和C编程语言语法相近, 在大部分UNIX下有效 tcsh 微型 C shell, 在小的系统里经常使用 其它:pdksh、ash, zsh等 ※LSTC
Red Hat默认Shell: Bash Linux • Bash :bash "Bourne Again" shell 当新建一个用户时默认的shell 可以使用命 令chsh修改。通过查看/etc/passwd可以知 道用户登陆的shell。临时改变shell可以直 接输入shell名直接回车。如:tcsh • 用户登陆后看见的 [用户名@主机名 当前目录名] $ _ 就是bash产生的 ※LSTC
Bash 的基本定义: Linux • 通配符:* ? [ ] - 等 • 路径的定义 • 转义字符: \ ‘ “ \放在特殊字符前,\将忽略字符的特殊含义 例如:ls -l a\?1 注意:a?1这样的文件是合法的 下面的也合法: a*1 统配符可以在文件名 内,但是不能在充当文件名开始和结束 例如:?1 abc* 不合法 ※LSTC
Linux 将字符串放在一对单引号中,全部的特殊 符号含义将失效 。 例如: ls ‘a*b*c*’ a*b*c* 会显示。 a*b*c*dds 不被显示 将字符串放在一对双引号中,除了bash使 用的一些特殊符号(如$)外,路径扩展 特殊字符都将被忽略。比较: [guest@linux /] echo “my friend is $USER” my friend is $USER [guest@linux /] echo my friend is $USER my friend is guest ※LSTC
Linux • 命令补全按键 tab 键 :按下以后能补充完成。若没有出 现表示没有类似信息或有很多类似信息。 你可以再按tab来确认 例如:想看看以k开头的命令: $ k按下两次tab键选择补偿 kill killall kinit • 文件补全: 类似。例如: cp /etc/pas按下tab补偿swd cp /etc/passwd ※LSTC
Bash登陆设置 Linux • 查看当前shell : echo $SHELL • 查看当前提示符设置 echo $PS1 [\u@\h \W]\$ • /etc/bashrc :设置所有用户登陆bash 例如: 找到: PS1="[\u@\h \W]\$ " 可以进行修改。 参数如下: ※LSTC
Linux • \u - 当前用户的用户名(=$LOGNAME) • \h - 运行shell的计算机名(hostname) • \H - 完整的计算机名 • \W - 当前工作目录名 • \w - 当前工作命令全路径名 • \$ - 对于普通用户显示$,对于超级用户显示# • \! - 当前命令的历史编号 • \# - 当前命令编号(在当前的shell下运行的命令) ※LSTC
\d -当前日期 \t -当前时间24小时制\T - 当前时间12小时制\@ - 当前时间(AM/PM格式)\s - shell的类型 \a - 告警声音\j - 用户的任务数 \n - 新行等等。 例如:修改为:PS1=“\u \w \t> “临时改变也可直接执行。结果举例:guest ~ 23:56:13 > 你也可以将此加入到你的.bashrc文件中 例如:PS1=“\w 我是老大 ¥ ” ※LSTC
Linux中的重定向 Linux • 分类:输入、输出重定向 • 标准输入设备:键盘标准输出设备:屏幕 • 输入重定向:如果命令所需的输出不是来自键盘,而是来自指定的文件,这就是输入重定向。 常见输入重定向: < 和 << 例如:wc < /etc/passwd 和 wc /etc/passwd 功能几乎相同 ※LSTC
Here文档: 输入重定向 << Linux 另一种输入重定向称为here文档,它告诉 shell当前命令的标准输入来自命令行。 here文档的重定向操作符使用<<。它将一 对分隔符(本例中用 abc 表示)之间的正 文重定向输入给命令。下例将一对分隔符 abc 之间的正文作为wc命令的输入,统计 出正文的行数、单词数和字符数。 ※LSTC
例如: [guest@obglinux guest]$ wc << abc > kkk > kkkk > kkkkk > kkkkkk > abc 4 4 22 最后不输入abc的话也可用ctrl+d结束 Linux ※LSTC
输出重定向:命令的输出也可以不显示在屏幕上,而是写入到指定文件中,这就是输出重定向。 常见:> 和 >> > : 可以覆盖和新建一个文件 例如: cat > abc , man ls > lshelp cat a1 > a2…… >>:可以在已存在的文件后面添加新内容 例如:如果a1、a2都存在: cat a1 >> a2表示 a2 = a2 + a1 如果a2不存在,则相当于 cat a1 > a2 ※LSTC
Linux 其它输出重定向: • 2>(或追加符号2>>)表示对错误输出设备重定向。例如: 如果有文件a1,没有文件a2: cat a1 2> err1 : err1内容为空 cat a2 2> err2 : err1内容为: cat: a2 : 没有那个文件或目录 >&:同上,只是err1为a1的内容 请自己对比理解和 2>> 。 ※LSTC
管道 pipe 操作 Linux • 管道操作: | 利用Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。 下面看几个例子: ※LSTC
Linux 例1:ls -l |more 将ls –l在屏幕上显示的内容作为more的参 数输入。这个过程相当于是: more ( ls –l ) 例2:cat e.txt|grep 'hi'|wc -l 管道将cat命令的输出送给grep命令。Grep 命令在输入里查找单词High,grep命令的 输出则是所有包含单词High的行,这个输 出又被送给wc命令,wc命令统计出输入中 的行数 ※LSTC
其它特殊符号使用 Linux • 符号`` 命令替换是将一个命令的输出作为另外一个命令的参数。例如: cd `pwd` (符号`在tab键的上面) • 符号&& 是用于连接两个命令的“与操作” cat f1 && cat f2只有当f1 正常显示时, f2 才能被显示。 • 符号|| 是用于连接两个命令的“或操作” 例:cat f3 || cat f4只有当显示f3出 错时,f4才能被显示。 ※LSTC
Linux • 符号&:后台执行程序 & 使当前命令在后台运行 (有它自己独立 的进程),所以下一条命令不需要等待前 一条命令结束才能开始。 例:locate –u当这条命令完成后才能继续 换成:locate –u & 屏幕显示 [1] 3024 在这条命令执行后转入后台,我们可以继续 操作其它的命令。一段时间后回车看见: [1]+ Done locate –u 任务结束。 ※LSTC
别名的使用:alias Linux 例如:alias c=‘cleaq’ Shell的历史记录功能 bash能自动跟踪每次输入的命令,并 把它保存在历史表中。所以我们要修 改执行以前的命令直接使用键盘上的 ↑翻出来修改就OK了。 历史表文件:.bash_history ※LSTC
Linux的shell script Linux shell编程:shell script (shell脚本) 类似于dos的批处理文件。 基本操作方式: (语句#代表注释) 假设文件名为t1,当前目录为用户目录: 1、使用vi编辑建立一文件t1。 2、编写命令代码并存盘退出。 3、chmod u+x t1 4、执行: ./t1 或 ~/ t1 注意:不能直接写t1 ※LSTC
Shell 的变量和语句 Linux • 变量分类:用户变量、系统变量 • 系统变量分为环境变量、内部变量等 • 用户变量想只读的话定义时格式为: • readonly 变量名 • 查看变量的值:echo $ 变量名 • 例如: • abc=‘this is a book’ • readonly ScripLineMax=200 • echo $abc • echo PS1 ※LSTC
常用环境变量: Linux $HOME :用户目录 $PATH : 用户目录 $MAILCHECK :每隔多少时间检查邮件 $TZ :时区 $MANPATH : man搜索路径 $PS1 : shell提示符 $PS2 : 命令尚未打完,shell要求再输入 的提示符 $HISTSIZE : history历史表长度 $USER : 用户名 $PWD : 当前路径 $HOSTNAME : 主机名 ※LSTC
常用内部变量: Linux $# 存储shell程序中命令行参数的个数 $? 存储上一个执行命令的返回值 $* 存储shell程序的所有参数 $0 shell脚本的名称 ‘$@’ 存储所有命令行输入的参数。 分别表示为“$1”“$2”…… $$ 存储shell程序的进程号 $! 存储上一个后台执行命令的进程号 例如:echo $! (前五页locate –u &后) 3024 ※LSTC
Shell 基本语句 : Linux if 条件 case 字符串 in …… then 表达式 1) 命令 ;; else 表达式 2) 命令 ;; fi …… esac while until for do do do done done done ※LSTC