1.Shell

shell是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的系统级程序

2.shell编程打印hello world

2.1 代码部分

  1. #!/bin/bash
  2. echo 'hello world'

代码解释:

1.#!/bin/bash:

​ 告诉计算机,使用bash解释器来执行代码

2.echo:

​ 控制台输出

2.2 执行代码

方式一:

给脚本可执行权限

  1. chmod 744 myshell.sh

然后直接运行脚本

  1. ./myshell.sh

方式二:(不推荐)

直接调用shell解释器执行

  1. sh myshell.sh

3 .注释

单行注释

  1. #内容

多行注释

  1. :<<!
  2. 内容
  3. !

4. 变量

4.1 变量的介绍

  1. 1.Linux中变量的分类:系统变量 自定义变量
  2. 2.系统变量:
  3. $PATH
  4. $HOME
  5. $PWD
  6. $SHELL
  7. $USER
  8. 3.显示当前shell中所有的变量:set

4.2 变量的定义

基本语法

  1. 1.定义变量:变量名=变量值
  2. 2.撤销变量:unset 变量名
  3. 3.声明静态变量:readonly 变量名. 静态变量不能unset

快速入门

  1. 1.定义变量a
  2. 2.撤销变量a
  3. 3.声明静态变量b=2,尝试unset撤销

定义规则

  1. 1.变量名称可以由字母、数字和下划线组成,但是不能以数字开头
  2. 2.等号两侧不能有空格
  3. 3.变量名称一般习惯为大写

将命令的返回值赋给变量(重点,用的多)

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

5. 设置环境变量

基本语法

  1. 1.export 变量名=变量值 shell变量输出给环境变量
  2. 2.source 配置文件 让修改后的配置信息立即生效
  3. 3.echo $变量值 查看环境变量的值

快速入门

  1. 1.在/etc/profile文件中定义MY_NAME环境变量
  2. 2.查看环境变量MY_NAME的值
  3. 强调:在使用MY_NAME前,需要让其生效
  4. 3.source /etc/profile
  5. 4,在另外一个shell程序中使用MY_NAME

6. 位置参数变量

介绍

当我们执行一个 shell

脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量

基本语法

  1. 1.
  2. $n (功能描述:n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大
  3. ${10}
  4. 括号包含,如${10})
  5. 2.
  6. $* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体) 相当于字符串
  7. 3.
  8. $@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待) 相当于列表
  9. 4.
  10. $#(功能描述:这个变量代表命令行中所有参数的个数)

快速入门

  1. 编写一个shell脚本,pasition.sh,在脚本中获取到命令行的各个参数信息
  2. age=$1
  3. age1=$2
  4. echo "$age"
  5. echo "$age1"
  6. 执行命令:
  7. bash pasition.sh 1 2 # 1和2为第一个和第二个参数

7. 预定义变量

介绍

就是 shell 设计者事先已经定义好的变量,可以直接在

shell 脚本中使用

基本语法

  1. $$ (功能描述:当前进程的进程号(PID))
  2. $! (功能描述:后台运行的最后一个进程的进程号(PID))
  3. $? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定(return)),则证明上一个命令执行失败)

快速入门

  1. 在一个shell脚本pre.sh中简单实用一下预定义变量(提示, ./myshell.sh & 后台运行myshell.sh).
  2. echo "$$"
  3. echo "$!"
  4. echo "$?"

8. 运算符

基本语法

  1. 1.$((运算式))
  2. 2.$[运算式]
  3. 3.`expr m + n`
  4. 特点:运算符之间要有空格
  5. +
  6. -
  7. /
  8. %
  9. \*
  10. \( \)

快速入门

  1. 写一个demo.sh完成:
  2. 1.3种方式计算(2+3)*4的值
  3. 2.方式2求出命令行两个参数的和
  1. #!/bin/bash
  2. res=$(((2*3)*4))
  3. echo "$res"
  4. res2=$[(2*3)*4]
  5. echo "$res2"
  6. res3=`expr \( 2 \* 3 \) \* 4`
  7. echo "$res3"
  1. res4=$[$1+$2]
  2. echo "$res4"
  3. 执行命令
  4. bash demo.sh 123 456

17.9 判断

基本语法

  1. [ 条件 ] 注意:条件前后要有空格
  2. 特别的:
  3. [ 非空 ] true
  4. [ ] false
  5. [ haha ] && echo true || echo false

判断语句

字符串比较

  1. = 判等
  2. != 判不相等

整数比较

  1. -lt 小于
  2. [ 123 -lt 56 ] && echo true || echo false
  3. -le 小于等于
  4. -gt 大于
  5. -ge 大于等于
  6. -eg 等于
  7. -ne 不等于

文件权限判断

  1. -r 有读的权限 [ -r 文件 ]
  2. -w 有写的权限
  3. -x 有执行权限

文件类型判断

  1. -f 存在并且是一般文件 [-f 文件]
  2. -e 文件存在
  3. -d 存在并且是一个目录

快速入门

  1. 1.'ok'是否等于'ok'
  2. 2.'ok100' 是否等于 'ok'
  1. 3.23 是否大于 23
  2. 4.23 是否大于等于 23
  1. 5./root是否存在
  2. 6./root是否是一般文件

10. 流程控制

10.1 if判断

基本语法

  1. if [ 条件 ]
  2. then
  3. 代码
  4. fi
  1. if [ 条件 ]
  2. then
  3. 代码
  4. else
  5. 代码
  6. fi
  1. if [ 条件 ]
  2. then
  3. 代码
  4. elif [ 条件 ]
  5. then
  6. 代码
  7. else
  8. 代码
  9. fi

快速入门

  1. 编写shell脚本,if.sh:
  2. 如果输入参数,大于等于90,优秀,大于等于60,则输出'及格了',如果小于60,则输出'不及格'
  3. #!/bin/bash
  4. if [ $1 -ge 90 ]
  5. then
  6. echo "优秀"
  7. elif [ $1 -ge 60 ]
  8. then
  9. echo "及格"
  10. else
  11. echo "不及格"
  12. fi

10.2 case 选择分支

基本语法(相当诡异,令人发指,what a fuck)

  1. case $变量名 in
  2. '值1')
  3. 代码
  4. ;;
  5. '值2')
  6. 代码
  7. ;;
  8. *)
  9. 代码 都没命中执行
  10. ;;
  11. esac

快速入门

  1. 编写shell脚本,case.sh:
  2. 当命令行参数是1时,输出'周一';是2时,输出'周二',其它情况,输出'其它'
  3. #!/bin/bash
  4. case $1 in
  5. "1")
  6. echo "星期一"
  7. ;;
  8. "2")
  9. echo "星期二"
  10. ;;
  11. *)
  12. echo "其他"
  13. ;;
  14. esac

10.3 for循环

遍历

基本语法
  1. for 变量 in 1 2 3
  2. do
  3. 代码
  4. done
快速入门
  1. 编写foreach.sh:
  2. 打印命令行输入的参数[这里可以看出$* $@的区别]
  3. $* 打印一次 $@ 遍历所有
  4. #!/bin/bash
  5. for i in "$@"
  6. do
  7. echo "$i"
  8. done

循环

基本语法
  1. for ((初始值;循环条件;结束语句))
  2. do
  3. 代码
  4. done
快速入门
  1. 编写for.sh:
  2. 1加到100,并输出结果
  3. #!/bin/bash
  4. for ((i=1;i<=100;i++))
  5. do
  6. res=$[$res+$i]
  7. done
  8. echo "$res"

10.4 while循环

基本语法

  1. while [ 条件 ]
  2. do
  3. 代码
  4. done

快速入门

  1. 编写while.sh:
  2. 从命令行中输入一个数n,统计1+...+n的值是多少
  3. #!/bin.bash
  4. i=1
  5. res=0
  6. while [ $i -le $1 ]
  7. do
  8. res=$[$res+$i]
  9. i=$[$i+1]
  10. done
  11. echo "$res"

11. 与用户交互

基本语法

  1. read 选项 变量
  2. 选项:
  3. -p:提示信息
  4. -t:等待输入的时间

快速入门

  1. 编写input.sh:
  2. 1.读取控制带输入的值
  3. read -p "请输入名字:" name
  4. echo "$name"
  5. 2.读取控制台输入的值,等待6
  6. read -p "请输入名字:" -t 6 name
  7. echo "$name"

12. 函数

12.1 系统函数

basename

基本语法
  1. basename [pathname] [suffix]
  2. 获得路径最后一部分
  3. 如果指定的suffix,那么会去掉结果中suffix的部分
快速入门
  1. 1.返回/home/aaa/test.txt'test.txt'的部分
  2. 2.返回/home/aaa/test.txt'test'的部分

dirname

基本语法
  1. dirname [pathname]
  2. 获得基础路径
快速入门
  1. 1.返回/home/aaa/test.txt'/home/aaa'的部分

12.2 自定义函数

基本语法

  1. function 函数名(){ #没有形参
  2. 代码;
  3. #参数使用:$1,$2,...,${10}...
  4. return xxx;
  5. }
  6. 调用:
  7. 函数名 1 2

快速入门

  1. 编写func.sh:
  2. 用函数的形式,计算两个参数的和
  3. #!/bin/bash
  4. function test(){
  5. res=$[$1+$2]
  6. echo "$res"
  7. }
  8. test 130 120

13. shell综合案例

  1. 在/root下编写mysql_db_backup.sh
  2. 需求:
  3. 1.每天凌晨210分,备份数据库mydb 到/data/backup/db
  4. 2.备份开始和备份结束时能够给出提示信息
  5. 3.备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式,如2019-09-28-044403.tar.gz
  6. 4.在备份的同时,检查是否有10天前的备份文件,如果有就删除
  7. mysqldump -uroot -p123 --host=localhost 要备份的数据库名字
  1. #!/bin/bash
  2. #备份的路径
  3. BACKUP=/data/backup/db
  4. #当前的时间作为文件名
  5. DATETIME=$(date +%Y_%m_%d_%H%M%S)
  6. echo "=======开始备份======"
  7. echo "=====备份的路径是 $BACKUP/$DATETIME.tar.gz"
  8. #主机
  9. HOST=localhost
  10. #用户名
  11. DB_USER=root
  12. #密码
  13. DB_PWD=997997
  14. #备份的数据库
  15. DATABASE=mydb
  16. 如果备份路径不存在,就创建
  17. [ ! -d "$BACKUP/DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
  18. #执行mysql的备份指令
  19. mysqldump -u$DB_USER -p$DB_PWD --host=$HOST $DATABASE | gzip > $BACKUO/$DATETIME/$DATETIME.sql.gz
  20. #打包备份文件
  21. cd $BACKUP
  22. tar -zcvf $DATETIME.tar.gz $DATETIME
  23. #删除临时目录
  24. rm -rf $BACKUP/$DATETIME
  25. #删除10天前的文件
  26. find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
  27. echo "=====备份成功+++++"

Linux之shell编程的基本使用的更多相关文章

  1. Linux 下shell 编程学习脚手架

    linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...

  2. Linux下Shell编程

    Linux的shell编程 1.什么是shell? 当一个用户登录Linux系统之后,系统初始化程序init就为每个用户执行一个称为shell(外壳)的程序. shell就是一个命令行解释器,它为用户 ...

  3. 【Hadoop离线基础总结】linux的shell编程

    linux的shell编程 基本了解 概述 Shell是一个用C语言编写的程序,通过shell用户可以访问操作系统内核服务,它类似于DOS下的command和后来的cmd.exe.Shell既是一种命 ...

  4. linux中shell编程

    shell编程 1 echo -e 识别\转义符 \a \b \t \n \x十六进制 \0八进制 等等 #!/bin/bash echo -e "hello world" 执行脚 ...

  5. linux下shell编程示例-获取进程id

    今天初步学习了一下linux下的shell编程,简单记录一下测试用例 1.编辑shell脚本文件如下: #!/bin/bashecho "hello bash linux"echo ...

  6. linux之shell编程基本语法

    Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell.Shell也是一门编程语言<解释型的编程语言>,即shell脚本<就是在用linux的s ...

  7. Linux学习——shell编程之变量

    shell编程之变量:Linux shell编程基础中的变量. 包括Bash变量的分类和各变量的详细使用,如:用户自定义变量.环境变量.语系变量.位置参数变量和预定义变量. 1:什么是Bash变量? ...

  8. 3. Linux的shell编程

    Shell 是一个用 C 语言编写的程序, 通过 Shell 用户可以访问操作系统内核服务.它类似于 DOS 下的 command 和后来的 cmd.exe.Shell 既是一种命令语言,又是一种程序 ...

  9. Linux学习——shell编程之正则表达式和字符处理命令

    shell编程之正则表达式 一 正则表达式 1 什么是正则表达式 正则表达式用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分隔.匹配.查找及替换操作. 2 shell编程之正则表达式 ...

随机推荐

  1. mysql怎么创建,删除,查看索引?

    mysql是一个开源的应用非常广泛的数据库.mysql里面的索引能利用利用指针,能够大大提高查询效率.特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍.那么,怎么创建索引 ...

  2. CSS3 Box-shadow 阴影效果用法

    一.基本用法: 二.内阴影用法: 三.阴影扩展长度值: box-shadow: 4rpx 4rpx 8rpx #aaa;

  3. js创建对象的三种方式和js工厂模式创建对象

    文章地址: https://www.cnblogs.com/sandraryan/ 创建对象 创建对象的三种方式 构造函数 ,是一种特殊的方法.主要用来在创建对象时初始化对象 1. 调用系统的构造函数 ...

  4. 洛谷P2719 搞笑世界杯 题解 概率DP入门

    作者:zifeiy 标签:概率DP 题目链接:https://www.luogu.org/problem/P2719 我们设 f[n][m] 用于表示还剩下n张A类票m张B类票时最后两张票相同的概率, ...

  5. H3C ACL包过滤的局限性

  6. 154th LeetCode Weekly Contest

    A B D均比较简单.先说C题 K-Concatenation Maximum Sum Given an integer array arr and an integer k, modify the ...

  7. 闲来无事写一个jquery计算器,没有进行封装......

    <!doctype html> <html> <head> <meta charset="utf-8" /> <title&g ...

  8. Linux 内核 struct device 设备

    在最低层, Linux 系统中的每个设备由一个 struct device 代表: struct device { struct device *parent; struct kobject kobj ...

  9. dotnet 将文件删除到回收站

    默认删除文件的时候 File.Delete 是将文件永久删除,如果是一些文档,建议删除到回收站,这样用户可以自己还原 通过 SHFileOperation 可以将文件放在回收站 本文提供的方法暂时只能 ...

  10. 网摘-获取屏幕dc并且将其画面显示在窗体中

    获取屏幕dc并且将其画面显示在窗体中 HWND hWnd = ::GetDesktopWindow();//获得屏幕的HWND. HDC hScreenDC = ::GetDC(hWnd);   // ...