Linux Shell 程序设计 笔记

shell是UNIX/Linux系统的一个重要层次,它是用户与系统交互的界面;

1.shell 概述

1.1shell的特点和主要版本

特点:

  1. 对已有的命令进行组合;
  2. 提供文件名扩展字符;
  3. 可直接使用shell内置命令;
  4. 允许灵活地使用数据流;
  5. 程序模块结构化;
  6. 能在后台执行;
  7. 提供可配置环境;
  8. 提供一个高级命令语言;

种类:

  1. Bourne shell(sh)
  2. C shell(csh)
  3. Korn shell(ksh)
  4. Bourne Again shell(bash)

1.2 简单shell程序示范

#!/bin/bash 

if test $#=0
then ls 
else 
    for i
    do 
        ls -l $i|grep `^d`
    done
fi

1.1.3shell脚本的建立和执行

建立:编辑器(如vi);
执行:

  1. 输入定向到shell脚本;
    $bash < 脚本名
  2. 以脚本名作为bash参数;
    $ bash 脚本名 [参数]
    特点:可在脚本名后带参数,从而将参数值传递给程序中的命令;(如函数的调用)
  3. 将shell脚本的权限设置为可执行;
    /*1.更改权限*/
    $ sudo chmod 777 文件名
    /*2.将该脚本所在目录添加到命令搜索路径(PATH)中*/
    $ PATH=$PATH:
    /*3.执行还文件*/
    $ 文件名

2.命令历史

2.1 显示历史命令

语法:history [option][arg...]

  1. 不带参数
    显示所有历史命令清单
  2. 带一个整数X
    显示历史表中最后X行
  3. 带一个文件名X
    将X作为历史文件名
  4. 常有选项
    -a 在历史文件中添加“新”历史命令行;
    -n 从历史文件中读取尚未读入的历史命令行,添加到当前历史清单中;
    -r 读取历史文件的内容,并把它作为当前历史命令;
    -w 把当前历史文件写到历史文件中,覆盖原有内容;
    -c 删除历史清单中的所有项

2.2 执行历史命令

执行历史命令是命令替换方式之一,以“!”开头;

格式 意义
!! 重复上一条命令,也就是“!-1”
!n 重复执行第n条命令
!-n 重新执行倒数第n条历史命令
!string 重新执行以字符串“string”开头的最近的历史命令行
!?string? 重新执行最近的、其中包含字符串string的那条历史命令
!# 在现在为止所输入的整个命令行

2.3 配置历史命令环境

在默认方式下,bash使用用户主目录下的文件“.bash_history”来保存命令历史;
更改:$ HISTFILE="路径"更改后则存放在该“路径”下;

历史文件保留的命令有限,其默认值为500;
更改:$ HISTSIZE=600

3.命令补全

Tab键

4.别名

4.1 定义别名

语法格式:alias [name[=value]]...
注:alias 后面没有指定参数——显示别名清单;

//例:
$alias ..='cd ..'//定义别名,需把代表内容有单引号括起
//注:赋值号"="两边不能有空格;

4.2 取消别名

语法格式:unalias name..

5.shell 特殊字符

5.1通配符

一般通配符

  • *(星号)——匹配任意字符的0次或多次出现;
    注:文件名前面的圆点(.)和路径名中的斜线(/)必须显式匹配;
    例:“f*”可匹配“f,fa,f1等”
    “*file” 不可匹配“.profile”,“.*file” 才可匹配“.profile”
    “/ect*.c”不能匹配“/ect/”目录下有后缀“.c”的文件;
    “/ect/*.c”可以;
  • ?(问号)——匹配任意一个字符;
  • [字符组]——匹配该字符组所限定的任何一个字符;
  • !(惊叹号)——否定

模式匹配

  • *(模式表)——匹配给定模式表中0次或多次出现的模式;
  • +(模式表)——匹配给定模式表中一次或多次出现的“模式”;
  • ?(模式表)——匹配模式表中任何一种0次或1次出现的”模式“;
  • @(模式表)——仅匹配模式表中给定一次出现的”模式“;
  • !(模式表)——除给定模式表中的的一个模式外,它可以匹配其他任何东西;

5.2 引号

三种:单引号、双引号和倒引号;

a.双引号
由双引号括起来的字符均作为普通字符对待;(”$、`、\“除外)

  • $ 变量替换
  • ` 命令替换
  • \ 转义字符(仅当其后接”$、`、“、\)
echo "current directory is `pwd`" //命令`倒引号
echo "home directory is $HOME"
echo "file*.?"
echo "directory '$HOME'"//变量倒引号

b.单引号
由单引号括起来的字符都作为普通字符出现;(特殊字符也失去原来的意义)

c.倒引号
带引号括起来的字符串被shell解析为命令行;在执行时先执行该命令行,并以结果代替括起部分;

//例
$today=`date`
$echo Today is $today
Today is 20170514日 星期日 23:11:32 CST

倒引号还可以嵌套使用,嵌套使用时内层倒引号必须用反斜线(\)将其转义;

//例
$Nuser=`echo The number of users is \`who | wc -l\``
$echo $Nuser
The number of users is 1

补充:反斜线(\)是转义字符,能把特殊字符变成普通字符;

5.3 输入/输出重定向

执行shell文件,通常打开三个标准文件:标准输入文件(stdin)、标准输出文件(stdout)和标准出错输出文件(stderr);分别对应键盘、屏幕和屏幕终端;

a.输入重定向

输入重定向符“<”,作用:把命令(或可执行程序)的标准输入重新定向到指定文件;

形式:命令 < 文件名

b.输出重定向
输出重定向符”>”,作用:把命令(或可执行程序)的标准输出重新定向到指定文件;

注:

  1. 该命令输出不显示在屏幕上,而是写入文件中;
  2. 若多个命令的输出都定向同一个文件,那么只有最后输出结果保留在文件中;
  3. 若定向到不存在的文件上,将会创建一个新文件;

形式:命令 > 文件名

c.输出附加重定向

输出重定向符”>>”,作用:把命令(或可执行程序)的标准输出附加到指定文件的后面;(类似追加)

形式:命令 >> 文件名

d.即时文件定向符

即使文件:由重新定向符“<<”、一对标记符以及若干输入行组成;

形式:命令 [参数]<< 标记符

作用:把预先处理的固定信息放入即时文件中,由相应命令执行时立即读取;

e.与文件描述字有关的重定向

文件描述字:每一个文件“打开”系统自动赋予的;

所以,三个标准文件的文件描述符分别是

  • 标准输入文件(stdin)——0
  • 标准输出文件(stdout)——1
  • 标准出错输出文件(stderr)——2

                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值