目录
shell脚本文件就是一个文本文件, 后缀名建议使用 .sh
结尾
首行需要设置Shell解析器的类型, 语法
含义: 设置当前shell脚本文件采用bash解析器运行脚本代码
#!/bin/bash
# 注释内容
:<<!
# 注释内容1
# 注释内容2
!
1、创建shell脚本文件
touch helloshell.sh
2、编辑文件
gedit helloshell.sh
3、增加shell脚本文件内容如下,并保存退出
#!/bin/bash
echo "hello shell"
4、执行脚本
sh helloshell.sh
效果
sh解析器执行方式
语法: sh 脚本文件
介绍: 就是利用sh命令执行脚本文件, 本质就是使用Shell解析器运行脚本文件
bash解析器执行方式
语法: bash 脚本文件
介绍: 就是利用bash命令执行脚本文件, 本质就是使用Shell解析器运行脚本文件
仅路径执行方式
语法: ./脚本文件
介绍: 执行当前目录下的脚本文件
注意: 脚本文件自己执行需要具有可执行权限, 否则无法执行
sh helloshell.sh
bash helloshell.sh
添加执行权限
chmod a+x helloshell.sh
./helloshell.sh
执行shell脚本文件有哪3种方式,并说明他们的区别?
sh执行脚本文件
bash执行脚本文件
仅路径执行脚本文件
区别: 前2种是解析器直接执行不需要可执行权限, 最后一种是脚本文件自己执行需要可执行权限
就是在Shell脚本文件中编写多个Shell命令
1、进入yj目录,执行创建/yj/itheima目录命令
mkdir /yj/Shell
2、创建/home/yj/batch.sh文件
touch batch.sh
3、编辑batch.sh文件,编写shell命令
gedit batch.sh
4、编写命令
命令1:创建/home/yj/Shell/one.txt文件
命令2:输出“I love Shell”字符串数据到one.txt文件中
#!/bin/bash
cd Shell # 切换到Shell目录
touch one.txt # 创建文件one.txt
echo "I love Shell">>/home/yj/Shell/one.txt #输出数据到one.txt文件中
运行batch.sh脚本文件
sh batch.sh
查看one.txt文件内容
cat Shell/one.txt
变量用于存储管理临时的数据, 这些数据都是在运行内存中的.
系统环境变量
自定义变量
特殊符号变量
是系统提供的共享变量.是linux系统加载Shell的配置文件中定义的变量共享给所有的Shell程序使用
1.全局配置文件 /etc/profile /etc/profile.d/*.sh /etc/bashrc
2.个人配置文件 当前用户/.bash_profile 当前用户/.bashrc
一般情况下,我们都是直接针对全局配置进行操作。
在Linux系统中,环境变量按照其作用范围不同大致可以分为系统级环境变量和用户级环境变量。
系统级环境变量:Shell环境加载全局配置文件中的变量共享给所有用户所有Shell程序使用, 全局共享 用户级环境变量:Shell环境加载个人配置文件中的变量共享给当前用户的Shell程序使用, 登录用户使用
查看命令
env
set
变量名称 | 含义 |
---|---|
==PATH== | 与windows环境变量PATH功能一样,设置命令的搜索路径,以冒号为分割 |
HOME | 当前用户主目录:/root |
SHELL | 当前shell解析器类型:/bin/bash |
==HISTFILE== | 显示当前用户执行命令的历史列表文件:/root/.bash_history |
PWD | 显示当前所在路径:/root |
OLDPWD | 显示之前的路径 |
HOSTNAME | 显示当前主机名:itheima |
HOSTTYPE | 显示主机的架构,是i386、i686、还是x86、x64等:x86_64 |
==LANG== | 设置当前系统语言环境:zh_CN.UTF-8 |
4.常用环境变量
变量名称 | 含义 |
---|---|
PATH | 命令搜索的目录路径, 与windows的环境变量PATH功能一样 |
LANG | 查询系统的字符集 |
HISTFILE | 查询当前用户执行命令的历史列表 |
就是自己定义的变量
自定义局部变量
自定义常量
自定义全局变量
就是定义在一个脚本文件中的变量, 只能在这个脚本文件中使用的变量, 就是局部变量
定义语法
var_name=value
变量定义规则
变量名称可以有字母,数字和下划线组成, 但是不能以数字开头
等号两侧不能有空格
在bash环境中, 变量的默认类型都是字符串类型, 无法直接进行数值运算
变量的值如果有空格, 必须使用双引号括起来
不能使用Shell的关键字作为变量名称
演示
查询变量值语法
# 语法1: 直接使用变量名查询
$var_name
# 语法2: 使用花括号
${var_name}
# 区别: 花括号方式适合拼接字符串
语法
unset var_name
演示
介绍
就是变量设置值以后不可以修改的变量叫常量, 也叫只读变量
语法
readonly var_name
演示
例如: 有2个Shell脚本文件 A.sh 和 B.sh
如果 在A.sh脚本文件中执行了B.sh脚本文件, 那么A.sh就是父Shell环境, B.sh就是子Shell环境
就是在当前脚本文件中定义全局变量, 这个全局变量可以在当前Shell环境与子Shell环境中都可以使用
export var_name1 var_name2
创建demo2.sh和demo3.sh文件
编辑demo2.sh, 里面定义变量VAR4并设置为全局, 并里面执行demo3.sh脚本文件
vim demo2.sh
编辑demo3.sh, 里面打印VAR4
vim demo3.sh
执行脚本文件demo2.sh, 观察打印VAR4效
执行脚本文件后, 在交互式Shell环境打印VAR4, 观察打印VAR4效果
全局变量在当前Shell环境与子Shell环境中可用, 父Shell环境中不可用
自定义变量进行增\删\改\查
定义和修改:
var_name=value
查询:
${var_name} 或 $var_name
删除:
unset var_name
$n
用于接收脚本文件执行时传入的参数
$0 用于获取当前脚本文件名称的
$1~$9, 代表获取第一输入参数到第9个输入参数
第10个以上的输入参数获取参数的格式: ${数字}, 否则无法获取
sh 脚本文件 输入参数1 输入参数2 ...
$#
获取所有输入参数的个数
$*
、[email protected]
$*
[email protected]
# 含义都是获取所有输入参数, 用于以后输出所有参数
$*
与[email protected]
区别
1.不使用双引号括起来, 功能一样
$*和[email protected]获取所有输入参数,格式为: $1 $2 ... $n
2.使用双引号括起来
"$*"获取的所有参数拼接为一个字符串, 格式为: "$1 $2 ... $n"
"[email protected]"获取一组参数列表对象, 格式为: "$1" "$2" ... "$n"
使用循环打印所有输入参数可以看出区别
循环语法
for var in 列表变量
do # 循环开始
命令 # 循环体
done # 循环结束
在demo4.sh中循环打印输出所有输入参数, 体验$*
与[email protected]
的区别
编辑demo4.sh脚本文件
增加命令: 实现直接输出所有输入后参数
增加命令: 使用循环打印输出所有输入参数
编辑demo4.sh文件
直接输出所有输入参数, 与循环方式输出所有输入参数(使用双引号包含 $*
与 [email protected]
)
#!/bin/bash
# 命令1: 打印当前脚本文件名字
echo "当前脚本文件名称:$0"
# 命令2: 打印第1个输入参数
echo "第一个输入参数:$1"
# 命令3: 打印第2个输入参数
echo "第二个输入参数:$2"
# 命令4: 打印第10个输入参数
echo "第十个输入参数不带花括号获取:$10"
echo "第十个输入参数带花括号获取:${10}"
# 命令5 打印所有输入参数的个数
echo "所有输入参数个数:${#}"
# 增加命令: 实现直接输出所有输入后参数
echo '使用$*直接输出:'$*
echo '使用[email protected]直接输出:'[email protected]
# 增加命令: 使用循环打印输出所有输入参数
echo '循环遍历输出$*所有参数'
for item in "$*"
do
echo $item
done
echo '循环遍历输出[email protected]所有参数'
for item in "[email protected]"
do
echo $item
done
运行观察区别
$?
用于获取上一个Shell命令的退出状态码, 或者是函数的返回值
每个Shell命令的执行都有一个返回值, 这个返回值用于说明命令执行是否成功
一般来说, 返回0代表命令执行成功, 非0代表执行失败
输入一个正确命令, 再输出$?
输入一个错误命令, 在输出$?
$$
用于获取当前Shell环境的进程ID号
查看当前Shell环境进程编号
ps -aux|grep bash
输出 $$ 显示当前shell环境进程编号
常用的特殊符号变量如下
特殊变量 | 含义 |
---|---|
$n |
获取输入参数的 $0 , 获取当前Shell脚本文件名字 $1~$9 , 获取第一个输入参数到第九个输入参数 ${10} 获取10和10以上的参数需要使用花括号 |
$# |
获取所有输入参数的个数 |
$* 与 [email protected] |
获取所有输入参数数据 区别: 如果不使用双引号, 功能一样, 获取所有参数数据为一个字符串, 如果使用了双引号, [email protected] 获取的就是参数列表对象, 每个参数都是一个独立字符串, |
$? |
获取上一个命令的退出状态码, 一般;来说0代表命令成功, 非0代表执行失败 |
$$ |
获取当前shell环境进程的ID号 |
一:被动攻击被动攻击是对信息的保密性进行攻击,窃取信息的来源以及数据,对信息加以查看。主要的攻击方式有窃听,嗅探等。对被动攻击采取的防范措施应该是阻止而不是检测。比如进行数据加密。二:主动攻击主动攻击是指攻击信息来源的真实性,数据传输的完整性以及系统服务的可用性。对截取的信息进行修改,添加或删除等操作。主要的攻击方式有欺骗,重放,假冒,拒绝服务和消息篡改等方式,对主动攻击采取的防范措施...
转:http://www.starming.com/index.php?action=plugin&v=wave&tpl=union&ac=viewgrouppost&gid=74&tid=20713&pg=1随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要 求远远高于PC的桌面应用程序。以上理由,足
1,修改Qt5源码:(1) 修改linuxfb/qlinuxfbscreen.h,如下所示:class QLinuxFbScreen : public QFbScreen{ Q_OBJECTpublic: QLinuxFbScreen(const QStringList &amp;args); ~QLinuxFbScreen(); bool initializ...
无坚不摧——完整项目 “当他说他是OpenCC的作者的那一刻,哪个面试官不被秒杀。” 当然你不需要NB到这个程度。如果你能对面试官说:“我读书期间做的项目有x万行代码。Google关键字xxx可搜到该项目的演示视频”,就足够了。 程序员的所有技术能力都能在一个完整的项目中得到淋漓尽致的体现,因此胜过千言万语的自我推销。所谓的完整项目应该满足以下条件: 1、完整性。具有一定的
tee 重定向输出到多个文件在执行Linux命令时,我们既想把输出保存到文件中,又想在屏幕上看到输出内容,就可以使用tee命令要注意的是:在使用管道线时,前一个命令的标准错误输出不会被tee读取。$ man teeNAME tee - read from standard input and write to standard output an
既然我们是要对二维码进行创建和解析,那我们就必须先来认识一下什么是二维码:二维码是一种在一维码基础上扩展出来的可读性条码,用黑白矩形图案表示二进制数据;那么问题又来了,一维码又是什么?下面我们经常会在包装袋上面看到的条形码:这就是一维码,我们可以看见它是由长度相同,粗细不同的线条构成,那么他是什么存储数据的呢?那我们就要找不同点,粗细是他们的变量,即用宽度存储数据,这是一维方案;二维码就是在一...
简述这其实是在策略四的前一个版本。 这个是没有手动实现beta对冲的策略。风险会更大。收益会更低。代码# 导入函数库import statsmodels.api as smfrom statsmodels import regressionimport numpy as npimport pandas as pdimport timefrom datetime imp...
一 需求分析 用汇编语言编写一个学生成绩管理系统,实现基本的学生成绩管理,功能包括成绩的录入,总分和平均分的计算,数据存档,从文件中读入数据等。要求程序界面友好,有输入界输出提示,有菜单等。 二 程序设计 2.1 程序总流程设计 ...
前言某天我们运营在编辑后台的时候说每次上传ppt,pdf,word时都要把每个文件先导出一次图片,然后一个一个上传(png用作预览,ppt,pdf,word源文件不能直接下载的),说效率太低了,问有没有办法只要上传文件就行。当时就想了想每个上传都转一次确实效率低,因为有些导出来可能有几十张图片。最后通过GitHub和网友博客。最终把自动转图片问题解决。第一次写python脚本有错误不优雅的欢迎指出~本文python版本3.9.5需windows 平台,需安装Microsoft Office脚
SDL/SDL2,chrome小恐龙游戏初次尝试。
1. 课程设计简介综合运用所学的计算机组成原理知识,掌握计算机各条指令运行的过程,设计并实现较为完整的计算机运算过程。设计并实现任意两个八位二进制数的原码一位乘法,实现带有符号位的运算。2. 实验设备TDN—CM+ 计算机组成原理实验教学系统一台, 排线若干。3. 总体思路(1) 完成接线, 实现基本的复杂模型机(2) 设计实现八位二进制数的原码一位乘法的汇编指令(3) 运行并调试程序4. 基本概...
前言按需加载模块的目的是实现代码分割,用户打开首页时不用下载全部的代码,打开特定的页面加载特定的代码,可以提高用户体验实现在router4以前,我们是使用getComponent的方式来实现按需加载的,router4中,getComponent方法已经被移除。对于react-router4中实现路由按需加载,网上也有几种解决方案,比如借助react-loadable或者bundle-load...