shel脚本基础系列(二)语法+运算+判断(上)

简介: shel脚本基础系列(二)语法+运算+判断

一、背景

       虽然自己是一名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 #结果为3
ln=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、判断数字的选项

image.png

5、判断文件的选项

image.png

目录
相关文章
|
7月前
|
C++
【C++】istream类型对象转换为逻辑条件判断值
【C++】istream类型对象转换为逻辑条件判断值
【C++】istream类型对象转换为逻辑条件判断值
|
7月前
02-python的基础语法-标识符/运算符/字符串拓展/字符串的拼接/字符串格式化/字符串精度控制/字符串格式化方式2/对表达式进行格式化/练习题/数据输入-input语句
02-python的基础语法-标识符/运算符/字符串拓展/字符串的拼接/字符串格式化/字符串精度控制/字符串格式化方式2/对表达式进行格式化/练习题/数据输入-input语句
|
运维 Shell Python
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)(一)
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)
135 0
|
7月前
|
存储 程序员 编译器
【新手解答5】深入探索 C 语言:宏中的文本、标识符和字符串 + 递归运算、条件语句、循环 + `switch-case` 与多项条件和枚举的差别
【新手解答5】深入探索 C 语言:宏中的文本、标识符和字符串 + 递归运算、条件语句、循环 + `switch-case` 与多项条件和枚举的差别
83 0
|
运维 Shell Perl
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)(二)
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)(二)
137 0
|
Shell
【shell】编写脚本基础、理论知识、参数定义、符号运算(下)
文章目录 前言 一、定义 二、规范 2.1 首行规范 2.2 执行方式 2.3 脚本错误 三、参数 3.1 变量分类 3.1.1 内置变量 3.1.2 预定义变量
108 0
【shell】编写脚本基础、理论知识、参数定义、符号运算(下)
|
Java Shell Linux
Shell流程控制(重点)、if 判断、case 语句、let用法、for 循环中有for (( 初始值;循环控制条件;变量变化 ))和for 变量 in 值 1 值 2 值 3… 、while 循环
Shell流程控制(重点)、if 判断、case 语句、let用法、for 循环中有for (( 初始值;循环控制条件;变量变化 ))和for 变量 in 值 1 值 2 值 3… 、while 循环
Shell流程控制(重点)、if 判断、case 语句、let用法、for 循环中有for (( 初始值;循环控制条件;变量变化 ))和for 变量 in 值 1 值 2 值 3… 、while 循环
|
Shell Perl
【shell】编写脚本基础、理论知识、参数定义、符号运算(上)
文章目录 前言 一、定义 二、规范 2.1 首行规范 2.2 执行方式 2.3 脚本错误 三、参数 3.1 变量分类 3.1.1 内置变量 3.1.2 预定义变量
113 0
|
Java C++ Python
Python 为什么能支持任意的真值判断?
Python 在涉及真值判断(Truth Value Testing)时,语法很简便。 比如,在判断某个对象是否不为 None 时,或者判断容器对象是否不为空时,并不需要显示地写出判断条件,只需要在 if 或 while 关键字后面直接写上该对象即可。 如果需要作出相反的判断,即“如果为 None 或为空”,只需要写成if not my_list 即可。
134 0
|
存储 前端开发 JavaScript
前端培训-初级阶段(13)-ECMAScript(语法,变量 ,值 , 类型,运算符 , 语句)
前端最基础的就是 HTML+CSS+Javascript。掌握了这三门技术就算入门,但也仅仅是入门,现在前端开发的定义已经远远不止这些。前端小课堂(HTML/CSS/JS),本着提升技术水平,打牢基础知识的中心思想,我们开课啦(每周四)。 该文为前端培训-初级阶段(13、18) (介绍了 ECMAScript 历史,ES6 常用点)的补充内容。 本文介绍ECMAScript基础知识。
150 0
前端培训-初级阶段(13)-ECMAScript(语法,变量 ,值 , 类型,运算符 , 语句)