Shell编程入门

Shell编程

*

1 概述*

2 shell脚本的执行方式

1)echo输出内容到控制台
    (1)基本语法:
        echo [选项] [输出内容]

选项:
-e: 支持反斜线控制的字符转换
(2)案例
这里写图片描述

控制字符                作用 
\\                      输出\本身
\a                      输出警告音
\b                      退格键,也就是向左删除键
\c                      取消输出行末的换行符。和“-n”选项一致
\e                      ESCAPE键
\f                      换页符
\n                      换行符
\r                      回车键
\t                      制表符,也就是Tab键
\v                      垂直制表符
\0nnn               按照八进制ASCII码表输出字符。其中0为数字零,nnn是三位八进制数
\xhh                按照十六进制ASCII码表输出字符。其中hh是两位十六进制数

2)脚本格式
脚本以 #!/bin/bash 开头

3)第一个Shell脚本
需求:输出helloworld
这里写图片描述
4)脚本的常用执行方式
第一种:输入脚本的绝对路径或相对路径
(1)首先要赋予helloworld.sh 脚本的+x权限
(2)执行脚本
第二种:bash或sh+脚本(不用赋予脚本+x权限)

3 shell中的变量

概述
    1)Linux Shell中的变量分为,系统变量和用户自定义变量。
    2)系统变量:\$HOME、\$PWD、\$SHELL、\$USER等等
    3)显示当前shell中所有变量:set
    ![这里写图片描述](https://img-blog.csdn.net/20180813131905316?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW4xMDkyMjQ4OTAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

3.1 定义变量
1)基本语法:
(1)定义变量:变量=值
(2)撤销变量:unset 变量
(3)声明静态变量:readonly 变量
注意:不能unset
2)变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
(2)等号两侧不能有空格
(3)变量名称一般习惯为大写
3)案例
(1)定义变量A
(2)撤销变量A
(3)声明静态的变量B=2,不能unset
(4)可把变量提升为全局环境变量,可供其他shell程序使用

3.2 将命令的返回值赋给变量
(1)A=ls -la 反引号,运行里面的命令,并把结果返回给变量A
(2)A=$(ls -la) 等价于反引号

3.3 设置环境变量
1)基本语法:
(1)export 变量名=变量值 (功能描述:设置环境变量的值)
(2)source 配置文件 (功能描述:让修改后的配置信息立即生效)
(3)echo $变量名 (功能描述:查询环境变量的值)
2)案例:
(1)在/etc/profile文件中定义JAVA_HOME环境变量
(2)查看环境变量JAVA_HOME的值

3.4 位置参数变量
1)基本语法
nn n ( 功 能 描 述 : n 为 数 字 , 0代表命令本身, 1 1 − 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 10 10 ) * (功能描述:这个变量代表命令行中所有的参数, ∗ 把 所 有 的 参 数 看 成 一 个 整 体 ) @ (功能描述:这个变量也代表命令行中所有的参数,不过 @ @ 把 每 个 参 数 区 分 对 待 ) # (功能描述:这个变量代表命令行中所有参数的个数)
2)案例
(1)输出输入的的参数1,参数2,所有参数,参数个数
(2) ∗ 与 @的区别
a) ∗ 和 @都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以 1 1 2 …$n的形式输出所有参数

这里写图片描述
结果:
这里写图片描述

3.5 预定义变量
1)基本语法:
$$ (功能描述:当前进程的进程号(PID))
$! (功能描述:后台运行的最后一个进程的进程号(PID))
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
2)案例
这里写图片描述
结果:
这里写图片描述

4 运算符
1)基本语法:
(1)“ (()) ( ( 运 算 式 ) ) ” 或 “ [运算式]”
(2)expr m + n
注意expr运算符间要有空格
(3)expr m - n
注意expr运算符间要有空格
(4)expr *, /, %
乘,除,取余
2)案例:计算(2+3)X4的值
(1)采用$[运算式]方式
这里写图片描述
这里写图片描述

5 条件判断
5.1 判断语句
1)基本语法:
[ condition ](注意condition前后要有空格)
2)案例:
[ at] 返回true
[] 返回false
[ condition ] && echo OK || echo notok 条件满足,执行后面的语句
5.2 常用判断条件
1)两个整数之间比较
= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
2)按照文件权限进行判断
-r 有读的权限
-w 有写的权限
-x 有执行的权限
3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录
4)案例
(1)23是否大于等于22
[ 23 -gt 22 ]
(2)student.txt是否具有写权限
[ -w student.txt ]
(3)/root/install.log目录中的文件是否存在
[ -e /root/install.log ]
6 流程控制
6.1 if判断
1)基本语法:
if [ 条件判断式 ]
then
程序
fi
注意事项:(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格

2)案例
判断输入的数是否等于123,是否等于456
这里写图片描述
这里写图片描述
6.2 case语句
1)基本语法:

case $变量名 in 
    "值1") 
      如果变量的值等于值1,则执行程序1 
      ;; 
    "值2") 
      如果变量的值等于值2,则执行程序2 
      ;; 
    …省略其他分支… 
    *) 
      如果变量的值都不是以上的值,则执行此程序 
      ;; 
esac

2)案例
输入1,输出1;输入2,输出2;输入其他,输出other
这里写图片描述

6.3 for循环
1)基本语法1:

for 变量 in 值1 值2 值3… 
    do 
      程序 
    done

2)案例:
(1)打印输入参数
这里写图片描述

这里写图片描述

3)基本语法2:

for (( 初始值;循环控制条件;变量变化 )) 
do 
  程序 
done

4)案例
(1)从1加到100
这里写图片描述
这里写图片描述

6.4 while循环

1)基本语法:
    while [ 条件判断式 ] 
    do 
      程序 
    done

2)案例
(1)从1加到100
这里写图片描述
这里写图片描述

7 read读取控制台输入
1)基本语法:
read(选项)(参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)
参数
变量:指定读取值的变量名
2)案例
读取控制台输入的名称

这里写图片描述
这里写图片描述
8 函数
8.1 系统函数
1)basename基本语法
basename [pathname] [suffix]
basename [string] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
2)案例
3)dirname基本语法
dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
4)案例
这里写图片描述

8.2 自定义函数
1)基本语法:

    [ function ] funname[()]
        {
            Action;
            [return int;]
        }
    funname

注意:
(1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。
(2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)
2)案例
(1)计算输入参数的和
这里写图片描述
这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 chmod命令的其他例子 6 1.4.5 可以选择使用符号模式或绝对模式 7 1.5 目录 7 1.6 suid/guid 7 1.6.1 为什么要使用suid/guid 8 1.6.2 设置suid/guid的例子 8 1.7 chown和chgrp 9 1.7.1 chown举例 9 1.7.2 chgrp举例 9 1.7.3 找出你所属于的用户组 9 1.7.4 找出其他用户所属于的组 10 1.8 umask 10 1.8.1 如何计算umask值 10 1.8.2 常用的umask值 11 1.9 符号链接 12 1.9.1 使用软链接来保存文件的多个映像 12 1.9.2 符号链接举例 12 1.10 小结 13 第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改时间查找文件 17 2.1.7 查找比某个文件新或旧的文件 17 2.1.8 使用type选项 17 2.1.9 使用size选项 18 2.1.10 使用depth选项 18 2.1.11 使用mount选项 18 2.1.12 使用cpio选项 18 2.1.13 使用exec或ok来执行shell命令 19 2.1.14 find命令的例子 20 2.2 xargs 20 2.3 小结 21 第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 23 3.1.4 创建一个新的crontab文件 24 3.1.5 列出crontab文件 24 3.1.6 编辑crontab文件 24 3.1.7 删除crontab文件 25 3.1.8 恢复丢失的crontab文件 25 3.2 at命令 25 3.2.1 使用at命令提交命令或脚本 26 3.2.2 列出所提交的作业 27 3.2.3 清除一个作业 27 3.3 &命令 27 3.3.1 向后台提交命令 28 3.3.2 用ps命令查看进程 28 3.3.3 杀死后台进程 28 3.4 nohup命令 29 3.4.1 使用nohup命令提交作业 29 3.4.2 一次提交几个作业 29 3.5 小结 30 第4章 文件名置换 31 4.1 使用* 31 4.2 使用? 32 4.3 使用[...]和[!...] 32 4.4 小结 33 第5章 shell输入与输出 34 5.1 echo 34 5.2 read 35 5.3 cat 37 5.4 管道 38 5.5 tee 39 5.6 标准输入、输出和错误 40 5.6.1 标准输入 40 5.6.2 标准输出 40 5.6.3 标准错误 40 5.7 文件重定向 40 5.7.1 重定向标准输出 41 5.7.2 重定向标准输入 42 5.7.3 重定向标准错误 42 5.8 结合使用标准输出和标准错误 43 5.9 合并标准输出和标准错误 43 5.10 exec 44 5.11 使用文件描述符 44 5.12 小结 45 第6章 命令执行顺序 46 6.1 使用&& 46 6.2 使用|| 46 6.3 用()和{ }将命令结合在一起 47 6.4 小结 48 第二部分 文本过滤 第7章 正则表达式介绍 49 7.1 使用句点匹配单字符 50 7.2 在行首以^匹配字符串或字符序列 50 7.3 在行尾以$匹配字符串或字符 51 7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52 7.7 使用\{\}匹配模式结果出现的次数 53 7.8 小结 55 第8章 grep家族 56 8.1 grep 57 8.1.1 双引号引用 57 8.1.2 grep选项 57 8.1.3 查询多个文件 57 8.1.4 行匹配 57 8.1.5 行数 58 8.1.6 显示非匹配行 58 8.1.7 精确匹配 58 8.1.8 大小写敏感 58 8.2 grep和正则表达式 58 8.2.1 模式范围 59 8.2.2 不匹配行首 5

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值