一、背景

虽然自己是一名java程序员,做后端的,但是最近工作中经常需要看别人写的脚本去运行项目,所以作为后端程序员,我们也需要了解一下shell语法,会读懂一些基本的shell脚本。

二、脚本定义执行介绍

1、bash脚本头部定义可执行环境,定义解释器,其后路径所指定的程序即是解释此脚本文件的 Shell 程序。

#!/bin/bash

2、赋予脚本权限

chmod +x a.sh

3、执行bash脚本

./a.sh

4、查看执行情况

bash -x zhishu.sh

执行后,会显示bash脚本的执行过程,如下,是一个质数脚本的执行过程。

+ read -p 请输入一个数: number
请输入一个数:33
+ '[' 33 -eq 1 ']'
+ '[' 33 -eq 2 ']'
++ seq 2 32
+ for i in '`seq 2 $[$number-1]`'
zhishu.sh: line 12: %2: syntax error: operand expected (error token is "%2")
+ echo 33是质数
33是质数

5、快捷键

(1)非insert模式下,执行下面,复制当前行。

yyp

(2)非insert模式下,执行下面,删除光标下面的若干行。

10d

6、转义字符,

(1)在前面加 \,示例,定义了一个变量$0。

echo "\$0 = $0"

7、脚本里面执行命令不输出

ping -c1 $ip &>/dev/null

三、read命令语法

1、、提示用戶輸入

(1)会在控制台显示input your name;,用户输入后会把输入内容赋值给name变量。

read -p "input your name:" name
# 打印用户输入内容
echo ${$name}

(2) 用戶輸入内容隐藏,-p会将用户输入的参数隐藏,控制台不显示。

read -s -p "input your name:" name

四、四则运算

1、共4种运算方式,记住语法可以在脚本中写复杂的运算。

(1)第一种

$((1+1)) 

(2)第二种

$[84*1] 

(3)第三种,需要有空格

expr 1 + 1 # 注意空格expr 10 \* 2   #\为转义字符

4、 let 给变量做计算

n=1;let n=n+2;echo $n #结果为3ln=1;let n=n**3;;echo $n #结果为8

五、条件判断

1、第一种方式,

(1)注意:中括号与计算字段两边需要有空格,否则会报错

[[ ]]

(2)示例:

[[ ! -d ./dir ]];echo $? #判断是否是个目录,是的话返回0

2、第二种方式,

(1)中括号与计算字段两边需要有空格,否则会报错

[]

(2)示例

[ -L ./va.sh ];echo $? #判断是否为链接文件,这种方式中括号里面需要空格

3、第三种方式

(1)使用test命令

test

(2)示例:

test test -f varable.sh #判断是否是文件test -d dir2;echo $? #判断是否是目录test varable.sh -nt a.sh;echo $? #判断前面文件是否比后面文件新test a.sh -ef b.sh ;echo $? #比较两个文件是否是同一个文件test -z "hello world";echo $? #判断字符串是否为空 1不为空test -n "hello world";echo $? #判断字符串是否为非空 1不为空test "hello"="word" ;echo $? #判断两个字符串是否相等test 1 -eq 2;echo $? #判断1和2是否相等 1为不相等

4、判断数字的选项

-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于

5、判断文件的选项

-d 是否是个目录
-f 是否是文件
-e 是否存在
-ef 两个文件是否相等
-w 一个文件是否可写
-L 是否有链接文件
-s 判断一个文件是否为非空
! -s 判断文件内容为空

6、字符串判断选项

-z 判断字符串是否为空
-n 判断字符串是否为非空

7、其他命令通过 man test 查看,有string的比较,文件判断等

六、多条件判断

1、语法

(1)逻辑与

-a 或者 &&

(2)逻辑或

 -o 或者 ||

(3)示例

#判断用户是否是管理员,满足条件打印后面内容
[ $(id -u) -eq 0 ]&& echo “是管理员” 

2、if 结构

(1)语法一

if [ condition ];thencommandfi

(2)语法二

if test condition ;thencommandelsecommandfi

(3) 语法三

if test condition ;thencommandelif test condition ;thencommandelse test condition ;thencommandfi

3、应用案例

(1)判断主机是否ping通

#!/bin/bashread -p 'ping 哪个ip:' ip#脚本里面执行命令不输出ping -c1 $ip &>/dev/nullif [ $? -eq 0 ];thenecho 通了elseecho 不通fi

(2)判断一个进程是否存在, 0为存在,使用ps命令

#grep -v 'grep' 结果不包含当前命令进程ps -ef|grep clickhouse|grep -v 'grep';echo $?

(3)判断一个进程是否存在, 0为存在,使用pgrep命令

#判断进程是否存在pgrep clickhouse &>/dev/nulltest $? -eq 0 && echo "当前clickhouse进程存在" || echo "当前进程不存在"

(4)判断一个用户是否存在

read -p "请输入一个用户:" usernameid $username &>/dev/nullif test $? -eq 0;thenecho "$username用户存在"elseecho "$username用户不存在"fi

七、总结

以上就是就是关于shell语法变量,运算,判断相关所有内容,希望对大家有帮助,可以参考一下,觉得不错的话,欢迎微信搜索关注java基础笔记,后面会不断更新相关知识,大家一起进步。

shel脚本基础系列(二)语法+运算+判断相关推荐

  1. shel脚本基础系列(三)for-while循环

    一.背景 虽然自己是一名java程序员,做后端的,但是最近工作中经常需要看别人写的脚本去运行项目,所以作为后端程序员,我们也需要了解一下shell语法,会读懂一些基本的shell脚本. 二.for循环 ...

  2. Java基础系列(二) 对象相等判断

    一.  equals 和 == 的区别是什么 == : 它的作用是判断两个对象的地址是不是相等, 即判断两个对象是不是同一个对象 基本数据类型 ==    比较的是值 引用数据类型  ==   比较的 ...

  3. 【C++自我精讲】基础系列二 const

    [C++自我精讲]基础系列二 const 0 前言 分三部分:const用法.const和#define比较.const作用. 1 const用法 const常量:const可以用来定义常量,不可改变 ...

  4. py基础系列(二):python语言基础(上)

    py 基本数据类型 整型 浮点型 复数型(complex) 逻辑型(布尔型) 字符串 字符串的表示 转义字符 字符串的格式化 变量 关键字和标识符 变量 运算符与表达式 运算符 (1)算数运算符 (2 ...

  5. Javascript学习总结 - JS基础系列 二

    简述 本系列将持续更新Javascript基础部分的知识,谁都想掌握高端大气的技术,但是我觉得没有一个扎实的基础,我认为一切高阶技术对我来讲都是过眼云烟,要成为一名及格的前端工程师,必须把基础打扎实了 ...

  6. Java基础系列二:Java泛型

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 一.泛型概述 1.定 ...

  7. python条件输出_python基础(二)条件判断、循环、格式化输出

    继续上一篇,今天主要总结一下条件判断.循环.格式化输出 一.条件判断 python中条件判断使用if else来判断,多分支的话使用if elif ... else,也就是如果怎么怎么样就怎么怎么样, ...

  8. python指定条件分类输出_python基础(二)条件判断、循环、格式化输出

    继续上一篇,今天主要总结一下条件判断.循环.格式化输出 一.条件判断 python中条件判断使用if else来判断,多分支的话使用if elif ... else,也就是如果怎么怎么样就怎么怎么样, ...

  9. WPF基础系列二:控件简介

    控件简介 文章目录 控件简介 前言 一.控件 二.控件类型 三.控件详解 1.ContentControl 类 2.HeaderedContentControl 类 3.ItemsControl 类 ...

  10. Java 基础系列(二十二) --- Maven到底是什么? 如何使用

    Maven 1 以前 2 现在 2.1 背景 2.2 新建 Maven 2.3 解读 Maven 项目 2.4 使用 Maven 2.4.1 管理依赖 2.4.2 打包构建 1 以前  举个例子, 在 ...

最新文章

  1. eclipse导入jar包_在命令行上操作JAR,WAR和EAR
  2. WARN [com.mchange.v2.async.ThreadPoolAsynchronousRunner] - com.mchange.v2.as
  3. mysql 网站 数据库_mysql系统数据库
  4. AjaxPro使用说明
  5. js基础知识汇总07
  6. 设计模式之模版方法模式
  7. 编译原理完整学习笔记(八):目标代码生成
  8. python爬虫框架论文开题报告范文_论文开题报告范文
  9. Java方法 (含计算器代码)
  10. VSCode 即时英文翻译插件 【翻译(英汉词典)】
  11. 如何让函数只执行一次
  12. 华维单片机编程-无线红外探测器03-环境搭建及程序详解
  13. 【数据分享】2022年11月西南地区POI数据分享(重庆、四川、贵州、云南、西藏)
  14. 【Kubernetes】Kubeadm安装的K8s集群的版本升级过程测试(二)
  15. CMNET和CMWAP GPRS 连接
  16. linux cma机制探究
  17. linux认证和红帽认证,linux认证之红帽认证:RedHatLinux新手入门(5
  18. 价值平均定期投资策略分析(二)定期递增法
  19. web前端实验系列juster
  20. 【总结】斜率优化DP

热门文章

  1. IETester更新至最新版已经兼容Windows7(附下载地址及Debugbar插件)
  2. 出现HTTPS证书错误原因
  3. JAVA 文件分割工具类
  4. 操作系统4.1.8 文件保护
  5. 实现基于小米的电子商务平台架构
  6. python ttk style,如何改变ttk.progressBar颜色在python
  7. wo-27s管理员账户和密码_开机密码忘了怎么解决
  8. HDUOJ---携程员工运动会场地问题
  9. 400GE燎原前夜,智能IP网络的核心路由器巅峰际会
  10. 目前最火热的创新创业项目有哪些?