洛阳免费网站建设珠海网站建设小小网络
- 作者: 五速梦信息网
- 时间: 2026年04月20日 10:29
当前位置: 首页 > news >正文
洛阳免费网站建设,珠海网站建设小小网络,seo做得好的企业网站,便宜的网站设计企业写在前面 好久没在项目内做自动化了#xff0c;主要是现阶段在项目内做自动化收益不大#xff0c;最近开发做batch run的正好缺人#xff0c;我看了一下代码#xff0c;就是通过代码读取jar包和远程服务器连接#xff0c;然后通过shell脚本#xff0c;向数据库插入数据主要是现阶段在项目内做自动化收益不大最近开发做batch run的正好缺人我看了一下代码就是通过代码读取jar包和远程服务器连接然后通过shell脚本向数据库插入数据平时用shell不多今天重新巩固下shell,也希望为新学shell的同学提供整体知识框架。 shell基本概念
什么是shell
Shell 脚本shell script简单理解是一些命令的集合运行中linux的shell中。业界所说的 shell 通常都是指 shell 脚本需要注意的是shell 和 shell script 是两个不同的概念。 Shell 是一个用 C 语言编写的程序它是用户使用 Linux 的桥梁通过它来访问操作系统内核的服务Shell 既是一种命令语言又是一种程序设计语言。
shell与linux命令的区别 Shell是一个命令解释器它能够执行和解释一系列的命令。Linux命令则是通过Shell执行的。 Shell更像是一个程序语言它支持变量、条件语句、循环、函数、文件操作等高级功能。而Linux命令则是预定义的、特定的系统操作命令比如ls、cp、mv等命令。 Shell可以编写脚本程序使其能够完成复杂的任务而Linux命令则不能。 Shell可以交互式地使用也可以脚本化地使用。而Linux命令则只能在终端或者脚本中使用。 Shell还提供了一些特殊的命令比如bash、zsh等可以改变Shell的行为。Linux命令则是相对固定的不能改变其行为。
shell常见语法
\(符号
\)代表的是Shell中的变量用于表示一个变量的值。例如\(PATH表示当前环境变量中的PATH值。
\)(())用于算术运算可以计算数学表达式的结果并将结果赋给变量。例如x\(((23))计算23的结果将结果5赋给变量x。
\)()用于命令替换可以执行命令并将命令的输出结果作为字符串返回。例如x\((ls)执行ls命令将ls命令的输出字符串赋给变量x。
date命令
date命令用于查看和设置系统的日期和时间。
例如
查看当前日期和时间并以特定格式显示
date %Y-%m-%d %H:%M:%S设定时间-1 day 表示当前日期前1天
date -d -1 day %d # -d数据类型
变量
shell中的变量可以用来存储数据变量名通常以字母或下划线开头也可以包含数字。变量赋值时等号两边不能有空格。
例如
nameTom在函数内部定义的变量是局部变量只有在函数内部才可以访问。而在函数外部定义的变量是全局变量所有的函数都可以访问。
例如
定义局部变量
function test() {local nameTomecho My name is \)name
}定义全局变量
nameTom
function test() {echo My name is \(name
}字符串操作
shell中可以对字符串进行各种操作如拼接、截取、替换等。
例如
拼接字符串
str1Hello
str2World
str\)str1\(str2
echo \)str2. 截取字符串
strHello, World
echo \({str:0:5}替换字符串
strHello, World
echo \){str/Hello/Hi}数字运算
shell中可以进行基本的数字运算如加减乘除乘方等。可以使用expr命令或\((())语法。
例如
使用expr命令进行运算
resultexpr 2 3
echo \)result使用\((())语法进行运算
result\)((\(num1*\)num2))
echo \(result数组
shell中可以使用数组存储多个数据数组使用小括号()来表示。
例如
定义数组
arr(apple banana orange)访问数组元素
echo \){arr[1]}获取数组长度
echo \({#arr[]}预设变量
shell脚本中已经定义了一些预设变量如 0 表示脚本名称 0表示脚本名称 0表示脚本名称USER表示当前用户\)PWD表示当前目录等。
例如
echo 当前脚本名称为 \(0
echo 当前用户为 \)USER
echo 当前目录为 \(PWD特殊变量
shell脚本中还有一些特殊变量如KaTeX parse error: Expected EOF, got # at position 1: #̲表示传递给脚本的参数个数*表示所有的参数列表。
例如
\)\( : Shell本身的PIDProcessID
\)! : Shell最后运行的后台Process的PID
\(? : 最后运行的命令的结束代码返回值
\)* : 所有参数列表。如\(*用「」括起来的情况、以\)1 \(2 … \)n的形式输出所有参数
\( :所有参数列表。如\)用「」括起来的情况、以\(1 \)2 … \(n 的形式输出所有参数
\)# : 添加到Shell的参数个数
\(0 : Shell本身的文件名
\)1\(n : 添加到Shell的各参数值。\)1是第1参数、\(2是第2参数…与用户交互命令read
shell脚本也可以与用户进行交互可以使用read命令实现。
例如
读取用户输入
read name
echo Hello, \)name逻辑判断
if 逻辑判断和参数
shell中可以使用if语句进行逻辑判断一般会用到以下参数
-e 判断文件或目录是否存在 -d 判断是否为目录 -f 判断是否为文件 -x 判断是否有执行权限
例如
判断文件是否存在
if [ -e /var/log/syslog ]; thenecho syslog文件存在
elseecho syslog文件不存在
fi逻辑判断常用比较符
在if语句中经常会使用到比较符例如
eq等于 equal tone不等于 not equal togt大于 greater thanlt小于 less thange大于等于 greater than or equal tole小于等于 less than or equal to
例如
判断两个数字是否相等
if [ \(num1 -eq \)num2 ]; thenecho 两个数字相等
elseecho 两个数字不相等
ficase逻辑判断
shell中的case语句格式如下
case 变量 in
value1)
command
;;
value2)
command
;;
value3)
command
;;
)
command
;;
esac可以用来进行多重逻辑判断可以配合使用各种比较符。
例如
根据用户输入的数字输出不同的信息
read num
case $num in1) echo 你选择了1;;2) echo 你选择了2;;3) echo 你选择了3;;) echo 请输入有效的数字;;
esac循环
for 循环
for循环遍历数组
arr(apple banana orange)
for i in \({arr[]}; doecho \)i
done\({arr[]} 是 shell 中的数组变量展开语法它会将数组中的所有元素展开成一个列表每个元素之间用空格分隔。 在这段脚本中假设 arr 数组中有三个元素 “apple”、“banana” 和 “orange”那么 a r r [ ] 就会展开成 a p p l e 、 b a n a n a 和 o r a n g e 这三个字符串然后 f o r 循环会遍历这三个字符串并输出。更具体地说 {arr[]} 就会展开成 apple、banana 和 orange 这三个字符串然后 for 循环会遍历这三个字符串并输出。 更具体地说 arr[]就会展开成apple、banana和orange这三个字符串然后for循环会遍历这三个字符串并输出。更具体地说{arr[]} 展开后的结果相当于是 “ a r r [ 0 ] 、 {arr[0]}、 arr[0]、{arr[1]}” 和 “\){arr[2]}” 这三个字符串因为 [] 在数组变量中表示所有元素的列表。如果写成 \({arr[*]}那么展开结果就是 “apple banana orange”其中所有元素用空格拼接起来。 while循环
num1
while [ \)num -lt 5 ]; doecho \(numnum\)((\(num1))
done中断和继续
在循环中可以使用break来中断循环使用continue来跳过本次循环。
例如
使用break跳出循环
for i in 1 2 3 4 5; doif [ \)i -eq 3 ]; thenbreakfiecho \(i
done使用continue跳过本次循环
for i in 1 2 3 4 5; doif [ \)i -eq 3 ]; thencontinuefiecho \(i
done函数
shell中可以定义函数来完成一些特定的任务函数可以在脚本中任何位置定义。
例如
定义一个函数
function myFunc() {echo Hello, World
}myFuncshell中的技巧
在shell脚本编写中还有一些技巧可以提升效率如 使用 或者 || 来执行多条命令可以在一些场景下节省一行代码. 命令之间用隔开:若前面的命令执行成功才会去执行后面的命令这样可以保证所有的命令执行完毕后执行过程都是成功的。命令之间用||或者|隔开: 只有前面的命令执行失败后才去执行下一条命令直到执行成功一条命令为止。注意区分表示希望脚本在后台运行的时候使用它 ‘’ 表示强引用表示弱引用用于执行命令。例如 echo 我是\)USER
echo 我是\(USER
echo 我在pwd目录下; 可以用来分隔多条命令但是建议使用 或 || 来代替可以更好地控制流程。
例如
grep xx log.txt cp log.txt log.bakshellcheck
shellcheck 是一款实用的 shell脚本静态检查工具。
安装方式 在大多数发行版的包管理中已经有shellcheck了如在基于debian的机器上
apt-get install shellcheck或者
yum -y install epel-release
yum install ShellCheck项目源码https://github.com/koalaman/shellcheck
如何使用 2.1 在网页上使用 在网页 https://www.shellcheck.net 上贴入你的脚本运行检查即可 2.2 在命令行中使用 下载后在命令行中调用 shellcheck yourscript 即可。 2.3集成到编辑器中(推荐) 推荐将shellcheck直接集成到日常编辑器中这样就可以直接在编辑器中查看ShellCheck建议以最快速度发现并修复问题。 Sublime 通过 SublimeLinterVSCode 通过 vscode-shellcheck
实战演练
使用shell打印99乘法表这个是面试常考题使用python或者java实现99乘法表现在用shell实现
首先vi test99.sh,并写入脚本如下
#!/bin/bash
for i in {1..9};do
for j in {1..9};doif [ \)j -le \(i ];thenecho -n \)j*\(i\)((i*j)) fidoneecho done以上脚本的逻辑是嵌套循环i和j如果j小于或者等于i,那么输出公式公式的含义等号左边是引用i和j的数值等号右边是i和j相乘的结果内循环结束后使用echo 输出换行。
使用shell检查脚本 更改脚本权限 chmod ax test99.sh最后执行结果如下
- 上一篇: 洛阳孟津网站建设网站域名申请怎么做
- 下一篇: 洛阳市app网站开发公司电话一建论坛建工教育网
相关文章
-
洛阳孟津网站建设网站域名申请怎么做
洛阳孟津网站建设网站域名申请怎么做
- 技术栈
- 2026年04月20日
-
洛阳建站公司效果企石镇仿做网站
洛阳建站公司效果企石镇仿做网站
- 技术栈
- 2026年04月20日
-
洛阳建设三轮网站装饰公司响应式网站建设案例
洛阳建设三轮网站装饰公司响应式网站建设案例
- 技术栈
- 2026年04月20日
-
洛阳市app网站开发公司电话一建论坛建工教育网
洛阳市app网站开发公司电话一建论坛建工教育网
- 技术栈
- 2026年04月20日
-
洛阳网站建设icp备案号
洛阳网站建设icp备案号
- 技术栈
- 2026年04月20日
-
洛阳网站建设的公司可以免费创建网站的软件
洛阳网站建设的公司可以免费创建网站的软件
- 技术栈
- 2026年04月20日
