资料来源

(1) UNIX shell范例精解

1.什么是shell? shell的作用?

(1) shell是一种特殊的程序,是用户与UNIX/Linux系统内核之间的接口;

(2) shell用于解释并运行由命令行或脚本文件输入的命令,从而实现用户与内核间的交互; shell还可以用于定制用户环境,这通常在shell的初始化文件中完成,比如设置提示符、窗口属性、别名、内置变量等;

2.shell的种类,特点,默认提示符

注1:可以通过查看/etc/shell或/etc/shells文件了解自己所使用的linux有哪些版本的shell;

注2:通过echo $SHELL可以得知当前环境使用的是哪种shell;

注3:用户登录系统后,终端上显示的就是主提示符,以表明它正在等待用户键入命令并按下回车键;

注4:提示符包括主提示符%和次提示符?; 主提示符可以被重置(可以在.cshrc中重置它或者在shell提示符后设置它,其中.cshrc中重置会作用于当前shell和它的所有子shell,shell提示符后重置只会作用于当前登录会话框),但次提示符不能被重置;

示例:
set prompt="$LOGNAME >"

注5:次提示符-挡直接在主提示符后编写脚本时,次提示符就会出现在屏幕上,并且持续出现直到该编程结构正常结束为止;

2.1 UNIX shell-Bourne shell (AT&T shell,标准的UNIX shell)

(1) shbang行:  #!/bin/sh;

(2) 默认命令提示符: $;

2.2 UNIX shell-C shell (Berkeley shell)

(1) shbang行: #!/bin/csh;

(2) 默认命令提示符: %;

2.3 UNIX shell-Korn shell (ksh)

(1) shbang行: #!/bin/ksh;

(2) 默认命令提示符: $;

2.4 Linux shell-GNU bash (bash或Bourne Again shell)

(1) shbang行:#!/bin/bash;

(2) 默认命令提示符: $;

2.5 Linux shell-TC shell (tcsh)

(1) shbang行: #!/bin/tcsh;

(2) 默认命令提示符: >;

2.6 Linux shell-Z shell

2.7 Linux shell-Public Domain Korn shell (pdksh)

(2) 默认命令提示符: $;

3.shell历史

4.系统启动,登录shell,命令或程序退出状态

4.1 shell启动

(1) shell启动后,会先查找由系统管理员设置的系统级的初始化文件(C shell的启动文件时/etc/csh.cshrc和/etc/csh.login),然后在用户的主目录中查找是否存在对应的shell初始化文件(C/TC shell的用户主目录初始化文件分别为.cshrc和.tcshrc);如果存在,就会执行这些文件; 这些初始化文件用于进一步定制用户环境;  执行完.cshrc或.tcshrc文件中的命令以后,接下来会执行.login文件中的命令;

注1:每次启动一个新的C/TC shell, .cshrc或.tcshrc文件都会执行,而.login文件,它也包含用于初始化用户环境的命令和变量,但后者仅在用户登录时执行一次;

4.2 .cshrc文件与.tcshrc文件

if($?prompt)  then
set prompt = "\! stardust > "
set history = 32
set savehist = 5
set noclobber
set filec fignore = (.o)
set cdpath = ( /home/jody/ellie/bin /usr/local/bin /usr/bin )
set ignoreeof
alias m more
alias status 'date; du -s'
alias cd 'cd \!*; set prompt = "\! <$cwd>" '

注1:获取主机名-echo $HOSTNAME或者直接执行hostname;

注2:$?用于测试某个变量是否已被设置;

注3:set prompt=" \! stardust >"表示主提示符被设置为当前历史事件的数目(\!)、名字stardust和字符>,替换掉了默认的提示符;

注4:set prompt=" \! <$cwd>"表示主提示符被设置为当前历史事件的数目(\!)和用<>括着的当前工作目录$cwd;

set prompt="$HOSTNAME\[\!\]$cwd>"

4.3 搜索路径

(1) shell用变量path来定位用户在命令行键入的命令; 如果在路径中列出的所有目录和当前目录下均未发现要找的名ing,shell就会往标准错误输出发送一条信息: Command not found;

(2) C/TC shell中每条路径之间用空白符分隔:

set path=( /usr/bin /bin /usr . )
echo $path
/usr/bin /bin /usr .

4.4 命令以及命令或程序退出状态,别名alias

(1) 命令与命令编组: 命令编组由多条命令组成,各条命令之间用;隔开,命令编组以换行符结束;

ls; pwd; cal 2022   ##cal 2022显示2022年日历;

(2) 命令和程序会在终止后,向父进程返回一个退出状态; 退出状态是一个0~255之间的整数; 程序退出时返回的状态是0,则说明命令执行成功; 退出状态非0,则说明命令因某种原因而运行失败;

grep "ellie" /etc/passwd
echo $status

(3) 创建别名与删除别名;

注1:创建别名示例,alias cd 'cd ~; set prompt="$cwd >"';

注2:删除别名, unalias 别名;

5.进程与shell

注1:进程可以用唯一的PID号来标识,内核负责控制和管理进程;

5.1 哪些进程正在执行?

(1) ps aux (ps命令可用于查找PID号)

(2) pstree

5.2 创建进程

(1) 系统调用fork

(2) 系统调用wait

(3) 系统调用exec

(4) 系统调用exit

5.3 终止进程

(1) Ctrl+C

(2) kill (内置的shell命令,可以通过PID终止进程或通过作业号终止作业)

6.变量

(1) shell可以定义两类变量:局部变量和环境变量; 局部变量只属于创建它们的shell,不会传给该shell派生的任何子进程; 环境变量会被父进程传给子进程; 局部变量可以使用内置命令set显示,环境变量可以使用env命令显示;

(2) 局部变量可以通过set variable_name=value来创建,如set name="Tom"(用unset 变量名取消设置),环境变量可以通过setenv variable_name value来创建,如setenv PRINTER shakespeare(用unsetenv 变量名取消设置);

set name=Tonny
echo $name
unset name
setenv NAME=TONNY
echo $NAME
unsetenv NAME

(3) 可以使用echo $variable_name显示变量值;

7.作业控制

jobs     列出所有正在运行的作业
Ctrl+Z 中止或暂停作业,屏幕上将出现提示符(暂停的程序需要用户发出bg或fg命令才能恢复运行)
bg 启动被中止的后台作业
fg 将后台作业调到前台
kill 向指定作业发送kill信号

注1:使用示例如jobs, fg %1, kill %2;

注2:作业调度与内置命令sched,sched允许创建一个作业列表,它们可以在指定的时间被调度执行,不带参数的sched命令,将显示所有调度事件的编号列表;

sched 14:30 echo 'Time to start your lecture'
sched 5PM echo 'Time to go home'
sched +1:30 /home/ellie/scripts/logfile.sc
sched

shell, 进程, 变量, 命令, 作业控制的更多相关文章

  1. Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数

    特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2. $# 传递给脚本或函数的参数个数. $* 传 ...

  2. 【Shell脚本学习8】Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数

    前面已经讲到,变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 例如,$ 表示当前Shell进程的ID,即pid,看下面的代码: $echo $$ 运 ...

  3. 【转】shell 教程——07 Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数

    前面已经讲到,变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 例如,$ 表示当前Shell进程的ID,即pid,看下面的代码: $echo $$ 运 ...

  4. Shell特殊变量:$0 $# $* $@ $? $$和命令行参数

    一.特殊变量表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2. $# 传递给脚本或函数的参数个数. $* ...

  5. linux bash Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数

    在linux下配置shell参数说明 前面已经讲到,变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 例如,$ 表示当前Shell进程的ID,即pid ...

  6. shell学习五十天----查看进程ps命令

    进程列表 列出进程中最重要的命令便是进程状态命令:ps. ps命令是进程状态(Process Status)的缩写.ps命令用来列出系统中当前执行的那些进程.ps命令列出的是当前那些进程的快照,就是执 ...

  7. centos shell编程5 LANMP一键安装脚本 lamp sed lnmp 变量和字符串比较不能用-eq cat > /usr/local/apache2/htdocs/index.php <<EOF重定向 shell的变量和函数命名不能有横杠 平台可以用arch命令,获取是i686还是x86_64 curl 下载 第三十九节课

    centos shell编程5  LANMP一键安装脚本 lamp  sed  lnmp  变量和字符串比较不能用-eq  cat > /usr/local/apache2/htdocs/ind ...

  8. Shell特殊变量

    $ 表示当前Shell进程的ID,即pid $echo $$ 运行结果 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数 ...

  9. Bash Shell内建命令和保留字

    Bash Shell内建命令和保留字命令含义!保留字,逻辑非:不做任何事,只做参数展开.读取文件并在shell中执行它alias设置命令或命令行别名bg将作业置于后台运行bind将关键字序列与read ...

  10. shell脚本变量

    既然是变量,自然分变量名和变量值,在使用的时候一定要注意哪些地方需要用变量名,哪些地方需要用变量的值. 自定义变量 shell变量不需要声明,随用随定义,给变量赋值的时候要注意 shell是空格敏感的 ...

随机推荐

  1. Android中drawable和mipmap到底有什么区别

    欢迎通过我的个人博客来查看此文章 老项目代码中发现有的图片放到了drawable中, 有的图片放到了mipmap中, 开发时秉承哪个目录下文件多放哪里的原则, 偶尔有疑惑搜一搜文章, 看到了结论也就这 ...

  2. $(...).bootstrapTable is not a function (已解决)

    1.首先保证Jquery是不是在所有js最前面引入且引入地址正确能打开 2.页面jquery不能重复引入,我这边就是重复引用了导致报错的

  3. Blender减面修改器

    推荐:使用 NSDT场景设计器 快速搭建 3D场景. 使用Decimate修改器的目的是减少雕刻或 3D 扫描模型的面数. 要使用抽取修改器,请转到对象模式并选择要减少面数的任何模型. 在对象模式中选 ...

  4. git 合并dev分支到 master分支 (merge)

    ## 查看分支列表 $ git branch -a ## 切换到本地dev分支 $ git checkout dev ## 更新本地dev 分支 $ git pull ## 切换到master 分支 ...

  5. 01#Vue Transition 过渡:基于 CSS 过渡

    过渡的阶段 上图是过渡的 6 个阶段示意图.总体是进入和离开两个阶段,进入和离开又各自有两个阶段.下表格是对每一个阶段的解释: 进入和离开实现过渡效果使用的是 CSS 样式,过度的样式相当于重写覆盖了 ...

  6. Java 反射概念的引入

    反射是什么 学Java的人都知道类概念,反射技术就是一种控制类的技术,JAVA程序在运行时,通过反射这个技术,能动态的获取到类实例的信息.创建实体类.操作实体类. 反射的功能列表: 获取任意类的名称. ...

  7. MogDB 学习笔记之 -- 索引失效

    [[toc]]# 概念描述哪些操作会导致分区表的全局索引失效(比如 move partition,drop partition ,truncate partition ,split partition ...

  8. list.ftl

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 < ...

  9. 信创要求下,FTP要不要替代?要怎么进行国产化替代?

    信创在国内如火如荼地发展,无论在技术探索和突破上,还是在政策规划上,都朝着更加完善的方向大步迈进.信创目前在从大的方面来说,信创目前主要集中在基础软件.硬件和芯片上,其中基础软件包括操作系统.数据库. ...

  10. Ubuntu docker安装、验证、卸载

    卸载Docker CE 卸载Docker CE软件包: sudo apt-get purge docker-ce 主机上的图像,容器,卷或自定义配置文件不会自动删除.要删除所有图像,容器和卷: sud ...