Shell
1.概述
Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核
还是一个功能相当强大的编程语言,易编写.易调试.灵活性强
2.shell解析器
查看linux提供的shell解析: cat /etc/shells

Sh和 bash是常用的 bash包含了其他的功能,进行了重新编写
查看默认解析器:echo $SHELL (centos默认的解析器是bash)
3.Shell 脚本入门
脚本格式
脚本为 #!/bin/bash 开头 (指定的解析器)
创建脚本 touch 脚本名.sh
例如:创建脚本并在脚本中输入helloworld
Touch helloworld.sh
Vi helloworld .sh

#!/bin/bash
Echo “helloworld”

Shell脚本入门
脚本是将需要执行的命令保存到文本中,按照顺序执行,他是解释型的,不需要编译
1、脚本格式
2、脚本以#!/bin/bash开头(指定解析器)
#!/bin/bash
#添加描述信息
#Name:谁编写的脚本
#DESC:脚本的描述,作用是什么
#PATH:路径(脚本的路径)
#CREATETIME:创建日期
#UPATETIME:更新日期
实例:
创建一个shell脚本:
1.删除class21下的test文件夹
2.在class21新建一个文件夹test2,在test2中创建3个子文件夹dir1,dir2,dir3
3.在dir2中新建一个文件student.txt
4.在student.txt中添加一个zhangsan
5.打印“任务执行完毕,2019-12-14 09:32:00”

1、编写脚本:
1.#!/bin/env bash 或者 #!/bin/bash
2.添加脚本的描述信息(姓名、描述、路径、创建日期、更新日期等)
3.开始写脚本
[root@jinghang ~]# mkdir class21
[root@jinghang ~]# cd class21/
[root@jinghang class21]# ll
总用量 0
[root@jinghang class21]# vim shell.sh

#!/bin/env bash

1.删除class21下的test文件夹 # 创建class21/test文件 mkdir -p root/class21/test # 删除

rm -rf /root/class21/test

2.新建在class21新建一个文件夹test2,在test2中创建3个子

文件夹dir1,dir2,dir3
mkdir -p /root/class21/test2/dir{1…3}

3.在dir2中新建一个文件student.txt

进入dir2

cd /root/class21/test2/dir2

添加student.txt文件

touch student.txt

4.在student.txt中添加一个zhangsan

echo “张三” >> student.txt

5.打印“任务执行完毕,2019-12-14 09:32:00"

echo "任务执行完毕 date "+%Y-%m-%d %H:%M:%S""

#!/bin/env bash
rm -rf /root/class21/test
mkdir -p /root/class21/test2/dir{1…3}
cd /root/class21/test2/dir2
touch student.txt
echo “zhangsan” >> student.txt
echo "任务执行完毕 date "+%Y-%m-%d %H:%M:%S""

执行方式:

(3)脚本的常用执行方式

第一种:采用bash或sh+脚本的相对路径或绝对路径(不用赋予脚本+x权限)

sh+脚本的相对路径

[jinghnag@hadoop101 datas]$ sh helloworld.sh

Helloworld

sh+脚本的绝对路径

[jinghnag@hadoop101 datas]$ sh /home/jinghnag/datas/helloworld.sh

helloworld

bash+脚本的相对路径

[jinghnag@hadoop101 datas]$ bash helloworld.sh

Helloworld

bash+脚本的绝对路径

[jinghnag@hadoop101 datas]$ bash /home/jinghnag/datas/helloworld.sh

Helloworld

第二种:采用输入脚本的绝对路径或相对路径执行脚本必须具有可执行权限+x推荐采用这种方式

(a)首先要赋予helloworld.sh 脚本的+x权限

[jinghnag@hadoop101 datas]$ chmod +x helloworld.sh

(b)执行脚本

相对路径

[jinghnag@hadoop101 datas]$ ./helloworld.sh

Helloworld

绝对路径

[jinghnag@hadoop101 datas]$ /home/jinghnag/datas/helloworld.sh

Helloworld

注意:第一种执行方法,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。

4 Shell中的变量
4.1系统变量
常用的有$HOME $PWD $SHELL $USER 等
例:
1查看系统变量的值 Echo $HOME
2 显示当前Shell中所有变量 set

4.2 自定义变量
4.2.1.语法
定义变量:变量=值 中间不能有空格
撤销变量:unset 变量
声明静态变量:readonly 变量 这个变量只能读,不能修改或者撤销
4.2.2规则
变量名称可以由字母/数字和下划线组成,但是不能以数字开头,环境变量名建议大写
等号两侧不能有空格
在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
变量的值如果有空格,需要用双引号或单引号括起来。

例:
定义变量A A=5
查看变量 $A
重新赋值 A=3
撤销变量A unset A
声明静态变量B readonly B=2
变量无法进行数值计算

变量的值如果有空格,需要使用双引号或单引号括起来

4.2.3把变量提升为全局环境变量 可供其他shell程序使用
Export + 变量名
4.3 特殊变量
4.3.1 $n
n功能:n为数字, n 功能:n为数字,n功能:n为数字,n代表该脚本名称,$1-$9代表第一到第九个参数, 十以上的参数需要用大括号包含
例:

4.3.2$#
$# 功能:获取所有输入参数个数,常用于循环

4.3.3$* $@
∗功能:代表命令行中所有的参数, * 功能:代表命令行中所有的参数,∗功能:代表命令行中所有的参数,*把所有的参数看成一个整体
@功能:功能一样,但是 @ 功能:功能一样,但是@功能:功能一样,但是@是把每个参数区分对待

4.3.4 $?
$? 功能:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个 命令正确执行;如果非0.则证明上一个命令执行不正确了。

shell知识点(一)的更多相关文章

  1. shell知识点小结

    目录 引言 shell中的数组 数组的定义 数组的使用 实际的例子 shell中大小的比较 shell中的括号 shell中函数的定义 杂项知识点 字符串转数组 常用判断标志 linux后台运行相关 ...

  2. shell知识点

    各个项目以实践为主.原理及更多细节介绍,请查看官方文档: 例如:bash,grub,postfix,pam,fastcgi,httpd,rsync等诸多项目. 各种总结表格 http://www.cn ...

  3. shell 知识点

        Q:1 Shell脚本是什么.它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文 ...

  4. shell知识点(二)

    Shell 中的数组 Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下: 方式2: arr=(value1 value2 value3)   (这种方式带值) ...

  5. shell知识点:${} 的神奇用法

    为了完整起见,我这里再用一些例子加以说明 ${ } 的一些特异功能:假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.txt我们可以用 ${ } 分别替换获得不同的值 ...

  6. 05 shell编程之正则表达式

    正则表达式&&文本处理利器 学习目标: l  掌握正则表达式的运用 l  掌握sed.awk文本处理工具的使用 目录结构:   正则表达式 正则表达式概述 l  正则表达式:使用单个字 ...

  7. Linux命令大全汇总,让你工作更有效率!

    基础命令 useradd:用户名 -m:创建新用户 passwd 用户名:为用户设置密码(当创建新用户后,就需要设置密码) whoami:查看当前用户名 exit :退出当前用户,返回之前切换过来的用 ...

  8. 老男孩IT教育-每日一题汇总

    老男孩IT教育-每日一题汇总 第几天 第几周 日期 快速访问链接 第123天 第二十五周 2017年8月25日 出现Swap file….already exists以下错误如何解决? 第122天 2 ...

  9. Bash shell编程的语法知识点(1)

    Bash shell脚本编程知识点如下(初学,不全,欢迎讨论补充): shell简介 脚本的简单介绍 变量和引用 算术运算 交互式编程 选择判断 条件测试 循环 函数 shell简介 shell是一种 ...

随机推荐

  1. 【AMAD】django-rules -- 强大的Django鉴权库,不需要数据库

    动机 简介 个人评分 动机 Django默认的权限原子级别是model级.但是一些时候我们像针对model每条数据库记录都进行权限空,也就是对象级权限控制. 简介 django-rules是一个Dja ...

  2. netcore程序部署 docker 异常 --生成图片二维码缺少libdl

    最近因业务需求需要在程序中实现二维码图片生成,于是就用到QRCoder开发库.最终在windows环境下部署运行没问题,但切换到docker(centos7.0)后发现是有问题的. 错误信息提示:Th ...

  3. 【C/C++】BOOST 线程完全攻略 - 基础篇

    C++多线程开发是一个复杂的事情,mfc下提供了CWinThread类,和AfxBeginThread等等函数,但是在使用中会遇到很多麻烦事情,例如线程之间参数传递的问题,我们一般都是把参数new一个 ...

  4. git 添加第二个远程仓库地址,一次修改到处上传~

    上传本机git 公钥到对应的代码托管平台 github/码云等 本地仓库执行 git remote set-url --add origin https://gitee.com/qichengTech ...

  5. 2.更新YUM源

    查看本地源 先删除本地所有源 下载源仓库文件,xxx.repo curl -o /etc/yum.repos.d/ali.repo http://mirrors.aliyun.com/repo/Cen ...

  6. 微信小程序全局属性

    通用全局属性:(前端也有) Infinity 代表正的无穷大的数值. NaN 指示某个值是不是数字值. undefined 指示未定义的值. 通用全局函数:(前端也有) decodeURI() 解码某 ...

  7. Java 类的构造器中this()和super()的困惑

    关于构造器中super的使用,书本上这样写: “super是指向父类的引用,如果构造方法没有显示地调用父类的构造方法,那么编译器会自动为它加上一个默认的super()方法调用.如果父类由没有默认的无参 ...

  8. docker在mac下安装及配置阿里云镜像加速

    安装 brew cask install docker 配置 关于阿里云加速地址,下面会有详细说明 阿里云官方镜像加速 官方文档:https://help.aliyun.com/document_de ...

  9. 自定义ResultMap查询,这里的关联写法只能用于不分页

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...

  10. php重定向的三种方法分享

    一.用HTTP头信息  也就是用PHP的HEADER函数.PHP里的HEADER函数的作用就是向浏览器发出由HTTP协议规定的本来应该通过WEB服务器的控制指令,例如: 声明返回信息的类型(" ...