技术标签: 正点Ubuntu入门学习 运维 linux ssh
终端中输入一系列命令完成一些操作,但是我们一条一条输入命令,这样就会很麻烦,shell脚本可以将很多条命令放到一个文件里面,然后直接运行。
shell 脚本类似 windows 的批处理文件,shell 脚本就是将连续执行的命令写成一个文件。
shell 脚本提供数组、循环、条件判断等功能。shell 脚本一般是 Linux 运维、测试、系统管理员需要掌握的。
shell 脚本是个纯文本文件,命令从上而下,一行一行地开始执行。
shell 脚本拓展名为.sh。shell 脚本第一行一定要为:
#!/bin/bash
我们在终端输入:
使用 shell 脚本:
#!/bin/bash
echo hello world!
给shell脚本可运行权限:
chmod 777 first.sh
或者
chmod +x first.sh
脚本:
#!/bin/bash
echo "please input name and your age:"
read name age #读取键盘输入字符串,赋值给变量 name 和 age
echo "your name:" $name ",your age: $age" # shell 脚本输出变量:$变量名
执行结果:
脚本(-p提示符):
#!/bin/bash
read -p "please input your name and your age" name age #-p 后面跟提示信息,即在输入前打印提示信息
echo "your name: $name,your age $age"
执行结果:
shell 仅支持整型,数值计算使用$((表达式)),示例:
#!/bin/bash
read -p "please input operand and number: " operand number
echo "$operand + $number = $(($operand+$number))"
echo "$operand - $number = $(($operand - $number))"
echo "$operand * $number = $(($operand * $number))"
divided=$(($operand/$number)) #赋值等号间不能有空格!
echo "$operand / $number = $divided"
执行结果:
test命令用于查看文件是否存在、权限等信息,可以进行数值、字符和文件三方面的测试。
cmd1 && cmd2
#当 cmd1 执行完毕且正确,那么 cmd2 执行,当 cmd1 执行完毕且错误,那么 cmd2 不执行
cmd1 || cmd2
#当 cmd1 执行完毕且正确,那么 cmd2 不执行,当 cmd1 执行完毕且错误,那么 cmd2 执行
字符串相等测试:
#!/bin/bash
read -p "please input first string: " firstStr
read -p "please input second string: " secondStr
test $firstStr = $secondStr && echo "The two strings are the same" || echo "The two strings are not the same"
# test str1 = str2 :两个字符串相等则为真
执行结果:
文件存在测试:
#!/bin/bash
read -p "please input file name: " filename
test -e $filename && echo "$filename exist" || echo "$filename non-existence"
# test -e :如果文件存在则为真
执行结果:
字符串判断:
#!/bin/bash
read -p "please input first string: " firstStr
read -p "please input second string: " secondStr
[ "$firstStr" == "$secondStr" ] && echo "The two strings are the same" || echo "The two strings are not the same"
# 中括号两端内测要加空格,内容建议加 "",否则有空格时会出现参数过多
[ "$firstStr" != "$secondStr" ] && echo "The two strings are not the same" || echo "The two strings are the same"
[ "$firstStr" = "$secondStr" ] && echo "The two strings are the same" || echo "The two strings are not the same"
echo firstStr: $firstStr
echo secondStr: $secondStr
执行结果:
$0 ~ $n,表示 shell 脚本的执行参数,包括 shell 脚本执行命令本身,shell 脚本执行命令本身为$0。
$#表示最后一个参数的标号。
$@表示除$0外的所有参数。
很像main函数的argc、argv两个参数。
示例:
#!/bin/bash
echo "The zero parameter :"$0
echo "The first parameter :"$1
echo "The second parameter:"$2
echo "The label of the last parameter:"$#
echo "All parameters :"$@
执行结果:
shell 脚本支持条件判断,虽然可以通过&&和||来实现简单的条件判断,但是稍微复杂一点的场景就不适合了。shell 脚本提供了if then条件判断语句:
if 条件判断;then
# 判断成立后要执行的语句
fi # 结束语句
--------------------------------------------------------------------
if 条件判断; then
# 条件判断后成立要执行的语句
else
# 条件判断后不成立要执行的语句
fi
--------------------------------------------------------------------
if 条件判断; then
# 条件判断后成立要执行的语句
elif 条件判断;then # 此语句可多次添加
# 条件判断后成立要执行的语句
else
# 条件判断后不成立要执行的语句
fi
--------------------------------------------------------------------
case $变量 in # 与 C语言 switch case 相似
"第一个变量内容")
# 程序段
;; # 表示第一个程序块结束
"第二个变量内容")
# 程序段
;; # 表示第二个程序块结束
"第n个变量内容")
# 程序段
;; # 表示第 n个程序块结束
*) # 类似 C语言 switch case的 default
# 程序段
;;
esac
例一:
#!/bin/bash
read -p "please input(Y/N):" value
if [ "$value" == "Y" ] || [ "$value" == "y" ]; then
echo "your input is Y"
exit 0
fi
if [ "$value" == "N" ] || [ "$value" == "n" ]; then
echo "your input is N"
exit 0
fi
结果:
例二:
#!/bin/bash
case $1 in
"a")
echo "param is :a"
;;
"b")
echo "param is :b"
;;
*)#这里通配符不能加上引号 加上就代表字符*了
echo "can't identify"
;;
esac
结果:
function fname(){
# function 可写可不写
# 函数代码段
}
fname # 函数调用
fname param1 param2 # 函数传参
函数传参用法示例:
#!/bin/bash
fun1(){
echo "$0"
echo "param1:$1"
echo "param2:$2"
echo "$#"
echo "$@"
}
fun1 lcx1 lcx2 #函数调用和传参
执行结果:
可以看出,$n $# $@表示函数相应传参值,$0仍然表示 shell 脚本第0个参数。
while 条件 # 条件状态为判断式,条件成立时循环,直到条件不成立
do # 循环开始
# 循环代码段
done
--------------------------------------------------------------------
until 条件 # 条件状态为判断式,条件不成立时循环,直到条件成立
do # 循环开始
# 循环代码段
done
--------------------------------------------------------------------
for var in con1 con2 con3 ......
do
# 循环代码段
done
# 变量 var 循环变化,第一次循环等于 con1,第二次循环等于 con2,以此类推
--------------------------------------------------------------------
for((初始值;限制值;执行步长))
do
# 循环代码段
done
# 用法类似于 C语言 for循环
while 循环示例:
for 循环示例1:
#!/bin/bash
for name in lcx1 lcx2 lcx3
do
echo "name = $name"
done
执行结果(for 循环了三次):
for 循环示例2:
#!/bin/bash
for((count=0;count<=10;count++))
do
echo "$count"
done
执行结果:
文章浏览阅读3.5k次。全局快捷键功能可以配置窗口置顶,透明,穿透,画中画,截图等功能,而鼠标快捷键操作可以配置在对应窗口连续点击执行置顶窗口,窗口移动,最大化,最小化等操作。打开WindowTop软件,所有已打开的窗口都会在左上角出现一个置顶栏,点击置顶栏的置顶复选框即可置顶窗口或取消窗口。输入法提示功能可以在置顶栏实时显示输入法的状态,又或者以独立的小窗口显示。屏幕截图,窗口截图,支持自由编辑画图,并能将截图以贴图的方式贴在屏幕上。可改变置顶栏的外观,还可以自由拖动置顶栏到想要的位置。_windowtop
文章浏览阅读246次。flex的使用Flex 布局是什么?Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。任何一个容器都可以指定为 Flex 布局。.box{ display: flex;}行内元素也可以使用 Flex 布局。.box{ display: inline-flex;}Webkit 内核的浏览器,必须加上-webkit前缀。.box{ display: -webkit-flex; /* Safari */ display: f_felx: 0 0 0
文章浏览阅读353次。Junit是干什么的我在这里就不讲解了。直接开始正题。常用的注解Junit中的注解很多,我们首先来看一下最常用的一些注解 - @Test:把一个方法标记未测试方法 - excepted:用来测试异常的,方法抛出该异常说明测试成功 - timeout:用来测试性能的,在规定的时间内完成,说明成功。注意单位是毫秒 - @Before:每个测试方法执行前自动调用一次_timed out after 500 milliseconds
文章浏览阅读464次。Python可以说是目前最火的语言之一了,人工智能的兴起让Python一夜之间变得家喻户晓,Python号称目前最最简单易学的语言,现在有不少高校开始将Python作为大一新生的入门语言。本萌新也刚开始接触Python,发现Python与其他语言确实有很大的区别。Python是由C语言实现的,因此想把Python与C语言做一个简单的比较。一、C语言是编译型语言,经过编译后,生成机器码,然后再运行,..._c十十pathyon
文章浏览阅读271次。前言上一篇已经解决切换到微信公众号的webview上了,但是定位webview上元素的时候一直提示找不到,打印page_source也找不到页面上的元素,这个问题困扰了一整天,还好最后找到了原因,此处埋了一个深坑,需要再次切换handle切换到webview1.上一篇已经详细介绍如何切换到微信公众号的webview上,这里就不重复说了,贴下代码:# 切换到webviewtime.sle..._自动化测试公众微信号python
文章浏览阅读1.1k次,点赞3次,收藏2次。2019.3.20 RecyclerView的依赖andriod studio更新到最新版本打开.xml文件点击Design点击下载按钮 等待下载完成在这里插入图片描述大功告成。_recyclerview依赖地
文章浏览阅读245次。分享有序列表和无序列表的使用和常用属性_无序列表和有序列表的标签分别是
文章浏览阅读4.1k次。本系统带文档lw万字以上+答辩PPT+查重 如果这个题目不合适,可以去我上传的资源里面找题目,找不到的话,评论留下题目,或者站内私信我,有时间看到机会给您发系统体系结构电影票订票系统的结构图4-1所示: 图4-1 系统结构登录系统结构图,如图4-2所示: 图4-2 登录结构图管理员结构图,如_电影购票系统er图
文章浏览阅读847次。1.6.1字符串常用操作1.6.1.1拼接字符串使用”+”运算符可以完成对多个字符串的拼接,”+”元素安抚可以连接多个字符串并产生一个字符串对象示例代码:teacher ="Will"content="主要负责Python自动化"结果:Will主要负责Python自动化字符串不允许直接与其他类型的数据拼接。示例代码:name="李二狗"course="语文成绩是"score=97 #(int类型)print(name+course+score)结果:Traceback _python 字符串 表达式
文章浏览阅读171次。←←←←←←←←←←←← 快!点关注Spring Boot是最流行的用于开发微服务的Java框架。在本文中,我将与你分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践。这些内容是基于我的个人经验和一些熟知的Spring Boot专家的文章。在本文中,我将重点介绍Spring Boot特有的实践(大多数时候,也适用于Spring项目)。以下依次列出了最佳实践,排名不分先..._bom专员的最佳实践
文章浏览阅读337次。一、环境配置编译的本地环境如下:gpu : RTX 3090ubuntu 20.04gcc 9.3.0driver : 460.56CUDA : 11.2CUDNN : 8.1.0python :3.6.12pytorch : 1.7.1torchvision : 0.8.2torchtext : 0.8.1pytorch、torchtext、torchvision 需要在同一个环境编译,编译顺序为: pytorch > torchvision > torcht_ms/iter
文章浏览阅读1.7k次。解决小程序不同机型出现布局差异问题_小程序在不同手机上页面不一样