Bash编程语法

2023-11-14

变量

a=10

定义一个变量

echo $a

输出变量a

unset a

删除变量a

readonly b

b变量只读(只读变量不能删除)

字符串:name="asdsdsd"

拼接字符串:name2="hello,"$name"!"

数组 arrayname=(value0 value1 value2 value3)

取数组值:value=${arrayname[n]}

给数组单独赋值:arrayname[0]=value0

arrayname[*]或者arrayname[@]取出数组所有的数据

控制分支

if [ 2==2 ];then echo "true";else echo "false";fi

if [[ 3>2 ]];then echo "true";else echo "false";fi

-gt:大于  -lt:小于 -eq:等于

if [ 3 -gt 2 ];then echo "true";else echo "false";fi(使用gt等就可以只用一个大括号)

注意:if跟括号之间需要空格,括号与变量之间需要空格

for循环

for var in item1 item2 ....itemN

do

    command1

    command2

    .......

    commandN

done

列如:

for i in $(cat test.txt);do echo $i;done

表示循环读取文件内容并输出

while循环

while condition

do

    command

done

列如:

while read line;do echo $line;done<dir.txt

表示从dir.txt文件中读取,循环的读取文件中的每一行

注意:文件中,一行数据如果有空格分隔,使用for循环时,会被分成两行。使用while循环,不会分成两行。

bash脚本编写

read命令

read命令是用于从终端或者文件中读取输入的内部命令,读取整行输入,但每行末尾的换行符不被读入

列如:

read var 从标准输入读取输入并赋值给变量

read var1 var2 var3 从标准输入读取多个内容

read 不指定变量(默认赋值给REPLY)

列如:

read a

123  (往a中写入值123)

echo $a   (结果输出:123)

脚本参数传递(脚本写在.sh文件中,脚本中要怎么接受传参呢?)

$0 脚本名称

$1~$n 获取参数

$# 传递到脚本的参数个数

$$ 脚本运行的当前进程ID号

$* 以一个单字符串显示所有向脚本传递的参数

$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误

列如,新建一个test.sh文件,在该文件中输入:

#! /bin/bash

echo $1,$2,$3

echo "文件名 "$0

echo "参数数量 "$#

echo "all "$*

echo "return "$?

保存文件

然后输入:bash test.sh 1 2 3

实际结果输出:

基本运算

+ 加法 `expr $a + $b`

- 减法 `expr $a - $b`

* 乘法 `expr $a \* $b`

/ 除法 `expr $a / $b`

注意:要使用反引号,键盘数字1左边的符号就是反引号;expr与$符号之间的空格,变量与运算符之间的空格,都不能少,语法严格控制,不然会报错

% 取余 `expr $a % $b`

= 赋值 a=$b 把变量b的值赋给a

== 相等 相同则返回true:[ $a == $b ]返回false(a=10 b=20)

!= 不相等 不相同则返回true:[ $a != $b ]返回true(a=10 b=20)

-eq 检测相等 [ $a -eq $b ]

-ne 检测不相等 [ $a -ne $b ]

-gt 检测左边是否大于右边 [ $a -gt $b ]

-lt 检测左边是否小于右边 [ $a -lt $b ]

-ge 检测左边是否大于等于右边 [ $a -ge $b ]

-le 检测左边是否小于等于右边 [ $a -le $b ]

bash与linux命令组合

bash与目录命令:

mkdir test

cd test

上面创建了一个test目录

echo "hello" > test.txt 创建了test.txt文件

使用echo 将hello 重定向到test.txt文件中,文件中就有了hello

cat test.txt  (输出文件的内容)

bash与内存:

for i in `ps aux | awk '{print $6}' | grep -v 'RSS'`

      count=$[$count+$i]

echo "$count/kb"

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bash编程语法 的相关文章

  • 禁用 Eclipse Java 调试器的热代码替换 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Eclipse 中禁用热代码替换 https stackoverflow com questions 2594408 how do i disable hot code replace in
  • 对话框上的 EditText 不返回任何文本

    我太累了 找不到错误 我没有发现任何错误 但我没有从 editText 收到任何文本 请看下面的代码 活动密码 xml
  • 无法使用maven编译java项目

    我正在尝试在 java 16 0 1 上使用 maven 构建 IntelliJ 项目 但它无法编译我的项目 尽管 IntelliJ 能够成功完成 在此之前 我使用maven编译了一个java 15项目 但我决定将所有内容更新到16 0 1
  • Spring安全“记住我”cookie在第一个请求中不可用

    我无法在登录请求后检索 Spring 记住我 cookie 但它在对受保护页面的下一个请求中工作正常 谁能告诉我怎样才能立即得到它 我在登录请求中设置了记住我的 cookie 但在 Spring 重定向回原始 受保护的 url 后无法检索它
  • Java:使用 HttpURLConnection 的 HTTP PUT

    如何执行 HTTP PUT 我正在使用的类似乎认为它正在执行 PUT 但端点将其视为我执行了 GET 我做错了什么吗 URL url new URL https HttpURLConnection conn HttpURLConnectio
  • 使用 RecyclerView 适配器在运行时更改布局屏幕

    我有两个布局文件 如下所示 如果列表中存在数据 则我显示此布局 当列表为空时 我会显示此布局 现在我想在运行时更改布局 当用户从列表中删除最后一项时 我想将布局更改为第二张图片中显示的 空购物车布局 In getItemCount Recy
  • 主线程如何在该线程之前运行?

    我有以下代码 public class Derived implements Runnable private int num public synchronized void setA int num try Thread sleep 1
  • 记录骆驼路线

    我的项目中有几个 Camel 上下文 如果可能的话 我想以逆向工程方式记录路线 因为我们希望保持与上下文相关的文档最新 最好的方法是什么 我们倾向于预先实际设计路线 并使用来自EIP book http www eaipatterns co
  • 内存一致性 - Java 中的happens-before关系[重复]

    这个问题在这里已经有答案了 在阅读有关内存一致性错误的 Java 文档时 我发现与创建 发生 之前 关系的两个操作相关的点 当语句调用时Thread start 每个具有 与该语句发生之前的关系也有一个 与 new 执行的每个语句之间发生的
  • 如何从 Retrofit2 获取字符串响应?

    我正在做 android 正在寻找一种方法来执行超级基本的 http GET POST 请求 我不断收到错误 java lang IllegalArgumentException Unable to create converter for
  • 如何在android中设置多个闹钟,在这种情况下最后一个闹钟会覆盖以前的闹钟

    我正在开发一个Android应用程序 用户可以在其中设置提醒时间 但我在以下代码中遇到一个问题 即最后一个警报会覆盖之前的所有警报 MainActivity java public void setreminders DatabaseHan
  • 如何将 android.net.Uri 转换为 java.net.URL? [复制]

    这个问题在这里已经有答案了 有没有办法从Uri to URL 我正在使用的库需要这个 它only接受一个URL但我需要在我的设备上使用图像 如果该方案的Uri is http or https new URL uri toString 应该
  • Java 服务器-客户端 readLine() 方法

    我有一个客户端类和一个服务器类 如果客户端向服务器发送消息 服务器会将响应发送回客户端 然后客户端将打印它收到的所有消息 例如 如果客户端向服务器发送 A 则服务器将向客户端发送响应 1111 所以我在客户端类中使用 readLine 从服
  • 将表值参数与 SQL Server JDBC 结合使用

    任何人都可以提供一些有关如何将表值参数 TVP 与 SQL Server JDBC 一起使用的指导吗 我使用的是微软提供的6 0版本的SQL Server驱动程序 我已经查看了官方文档 https msdn microsoft com en
  • RSA OAEP、Golang 加密、Java 解密 -BadPaddingException:解密错误

    我正在尝试解密使用 RSA OAEP 在 Golang 中加密的字符串 但出现 BadPaddingException 解密错误 很难弄清楚我错过了什么 这是Golang加密方法 func encryptString rootPEM io
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • 解决错误javax.mail.AuthenticationFailedException

    我不熟悉java中发送邮件的这个功能 我在发送电子邮件重置密码时遇到错误 希望你能给我一个解决方案 下面是我的代码 public synchronized static boolean sendMailAdvance String emai
  • 挂钩 Eclipse 构建过程吗?

    我希望在 Eclipse 中按下构建按钮时能够运行一个简单的 Java 程序 目前 当我单击 构建 时 它会运行一些 JRebel 日志记录代码 我有一个程序可以解析 JRebel 日志文件并将统计信息存储在数据库中 是否可以编写一个插件或
  • JAXB - 列表<可序列化>?

    我使用 xjc 制作了一些课程 public class MyType XmlElementRefs XmlElementRef name MyInnerType type JAXBElement class required false
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创

随机推荐