到新公司之后,发现好多地方需要使用shell来编写一些简单的程序来提升自己的工作效率,因此专门B站上查看视频(尚硅谷的视频),在这里学习总结下shell编程。
shell是一个命令行解释器,它接收应用程序或用户的命令,然后调用操作系统内核。
shell还是一个相当强大的编程语言,易编写,易调试,灵活性强。
脚本格式以#!/bin/bash开头(指向解释器)
方式一:sh 或 bash + 相对或绝对的文件路径(不需要 +x)
方式二:直接输入脚本的相对或绝对路径(需授可执行权限 +x)
方式三:在脚本的路径前面,使用一个 . 或一个source (这种方式不同于以上2种,以上两种运行时会嵌套子shell,这个不会嵌套,就在本环境运行,开子shell与不开子shell的区别在于,环境变量的继承关系,如在子shell中设置的当前变量,父shell中是不可见的 )
a.常用的系统变量(这里大多数都是写全局的环境变量)
$HOME、$PATH、$SHELL等、$PWD
a.基本语法:
(1)定义变量:变量名=变量值, 注意:=前后不能有空格
(2)撤销变量:unset 变量名
(3)申明静态变量:readonly 变量,注意:不能unset
b.变量定义的规则:
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写
(2)等号两侧不能有空格
(3)在bash中,默认变量都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或者单引号给括起来。
c.案例实操:
(1)下图中设置的变量时局部变量(比如,在当前环境设置后,在子bash中就访问不到)
(2)设置为全局变量
步骤1:先设置局部变量
步骤2:export 变量 注:意思就是把父shell中的变量导出变成一个全局变量
注意:子bash中更改的的全局变量,只在子bash中有效,退出子bash后无效
a.位置参数:$n:
(1)基本语法:
$n(功能描述:n为数字,$0代表脚本名称,$1-$9代表一到九个参数,十以上的要用大括号包含${10})
(2)实操案例
b.参数个数:$#
(1)基本语法:
$#(获取所有输入参数的个数,常用于循环,判断参数个数是否正确以及加强脚本的健壮性)
(2)实操案例
c.获取参数:$* 和 [email protected]
(1)基本语法
$* :这个变量代表命令行中所有的参数, $*把所有的看成一个整体
[email protected]:这个变量代表命令行中所有的参数,不过[email protected]把每个参数区分对待
(2)案例实操
(1)基本语法
$((运算式)) 或 $[运算式]
(2)案例实操
(1)基本语法
a.test condition
b.[ condition ] 注意:condition前后要有空格
注意:1.条件非空返回true,否则返回false;2.记得加空格,不然程序会认为是一个值
c.常用判断条件
(1)两个整数之间比较
[ … ] && … || … 其实就是if…else…语句了
d.案例实操
a.基本语法
(1)单分支
if [ 条件判断式 ];then #分号表示一行出现2步命令的实现
程序
fi
#或者
if [ 条件判断式 ]
then
程序
fi
(2)多分支
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
b.案例实操
a.基本语法
case $变量名 in
“值1”)
如果这个值等于值1,则执行程序1
;;
“值2”)
如果这个值等于值2,则执行程序2
;;
…省略其它分支…
)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注意事项:
(1)case行尾必须为单词"in",每个模式必须以右括号")“结束。
(2)双分号”;;“表示命令序列结束,相当于java中的break
(3)最后的”"表示默认模式,相当于java中的default
b.案例实操
a.基本语法1
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
b.案例实操1
注意:双小括号(( ))中就可以直接使用数学中的运算表达式,如:<=
c.基本语法2
for 变量 in 值1 值2 值3
do
程序
done
d.操作实例2
增强for循环
a.基本语法
while [ 条件判断式 ]
do
程序
done.
b.案例实操
另一种写法:使用内嵌函数let
#!/bin/bash
a=1
while [ $a -le $1 ]; do
# sum=$[$sum+$a]
# a=$[$a+1]
# 使用内嵌命令let,实现类似其它语言中的写法
let sum+=$a
let a++
done
echo "$sum"
a.基本语法
read (选项) (参数)
选项:
(1)基本语法
basename [string/pathname] [suffix] (功能描述:basename命令会删掉所有前缀,包括最后一个('/'字符),然后将字符显示出来)
basename可以理解为获取路径里的文件名称
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
(2)案例实操
调用系统函数:$(函数名 参数)
(1)基本语法
(2)案例实操
a.基本语法
[function] funname[()]
{
Actiion;
[return int;]
}
b.经验技巧
c.案例实操
#!/bin/bash
# 首先,判断参数的个数是1
if [[ $# -ne 1 ]]; then
echo "参数个数错误,应该输入一个参数,作为归档目录名。"
exit
fi
# 从参数中获取目录名称
if [[ -d $1 ]]; then
echo
else
echo "目录不存在!"
echo
exit
fi
DIR_NAME=$(basename $1)
DIR_PATH=$(cd $(dirname $1);pwd)
# 获取当前日期
DATE=$(date +%y%m%d)
# 定义生成文件的归档名称
FILE=test_${DIR_NAME}_$DATE.tar.gz
DEST=/home/jupiter/dongshuai/$FILE
echo "开始归档。。"
echo
tar -czf $DEST $DIR_PATH/$DIR_NAME
if [[ $? -eq 0 ]]; then
echo
echo "归档成功!"
echo
exit
else
echo "归档出现问题!"
echo
fi
然后使用crontab可以定制执行
步骤如下:1.打开DLL,OD会提示是否要启动LOADDLL.EXE来加载DLL,选是,然后就停在了DLL的入口处,这里我随便找了一个DLL2.此时如果F8或者F7的话进的是DLL的主函数,如果不想跟这些主函数的话可以直接F9,然后OD会再停下来,在最下方的消息栏会提示DLL初始化完成,LIKE THIS3.点菜单栏的 调试-》调用DLL输出,会出现如下的对话框4.选择想调试的...
今天在Linux 64位系统中启动BIEE 11g时遇到以下错误/app/biee/Oracle/Middleware/Oracle_BI1/Oracle_IDM1/opmn/bin/opmn: error while loading shared libraries: /app/biee/Oracle/Middleware/Oracle_BI1/lib/libdms2.so: cannot
转自:http://www.cnblogs.com/wshsdlau/p/5643862.htmlExcel2007版本的代码如下,本文主要是用于POI解析大文件Excel容易出现内存溢出的现象而提出解决方案,故此解决了大数据量的Excel文件解析的难度,在此拿出来贡献给大家,谢谢!里面用到的相关类请查看: http://www.cnblogs.com/wshsdlau/p/5
PsLoadedModuleList是Windows加载的所有内核模块构成的链表的表头,利用它可以枚举所有这些模块的信息,下面是WRK中对PsLoadedModuleList的定义:LIST_ENTRYPsLoadedModuleList;内核在加载驱动时,会为每一个驱动创建一个驱动对象(DRIVER_OBJECT),下面是驱动对象的数据结构:
人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的一系列相关技术,通常也叫做人像识别、面部识别。2017年9月13号,IPhoneX发布的时候,基于3D结构光的人脸解锁是亮点之一,下面是其前置的传感器结构:之后的荣耀V10也是搭载了2D的人脸识别,当然,效...
原标题:正式发布!鸿蒙,来了! 鸿蒙真的来了!余承东宣布,鸿蒙的英文名叫HarmonyOS!对于华为来讲,8月9日是华为开发者大会2019的首日,对于上台演讲的华为消费者业务CEO余承东来说,今天是他的50岁生日。他在华为工作27年,人生四分之一已完全浇筑在华为。从数字程控交换机的研发工程师,到“华为手机老大”,他靠着不知从那儿来的一腔孤胆冲到今天。2019年5月份,他曾说华为鸿蒙最早将于今秋面世...
Spring依赖注入常见java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做。1. 垃圾回收机制
TensorFlow(一)
在tomcat的启动参数中加如:-Dforge.forceNoStencil=true,能解决下面问题,错误的关键信息为:# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows。使用activity部署流程时,报如下错误:16-01-13 10:0
方式1通过vm设置实现第一步:打开设置第二步:选择使用ISO文件,并且是已连接状态第二步执行完毕,表示系统已经挂载了iso第三步:将光驱挂载到目录首先创建一个目录/mnt/cdrom (自定义):mkdir /mnt/cdrom然后直接执行挂载:mount /dev/sr0 /mnt/cdrom方式二第一:将系统ISO文件上传至l...
刚看论文题目 SpanBERT: Improving Pre-training by Representing and Predicting Spans,以为是篇水文章,Bert 遮盖(mask)掉一小段(span)的 idea 并不新了,早有人做过,如百度 ERNIE,还有 Google 放出的 WWM (Whole Word Masking) BERT 模型,都是类似做法,当然细节上会有些不同...
一、前言 今天在做数据迁移时,项目旧数据迁移至新数据仓库中,有网络资源下载 重传的需求,于是在整理的过程中,出现了上述问题, java.io.IOException: Server returned HTTP response code: 400 for URL。 当时使用的是 org.apache.commons.io.FileUtils 封装的文件下载包,...