首页 > 其他分享 >Bash

Bash

时间:2023-06-01 12:55:05浏览次数:19  
标签:... 变量 echo Bash 数组 bash name

一、什么是bash?

  • bash是一个命令处理器, 运行在文本窗口中, 并能执行用户直接输入的命令.
  • bash还能从文件中读取Linux命令, 称之为脚本.
  • bash支持通配符, 管道, 命令替换, 条件判断等逻辑控制语句
  • bash是shell的一种,bash是Linux系统默认使用的shell。shell就是一个命令行解释器,用户想要以不同的方式与Linux内核交互,就可以采用不同的shell,例如除bash外还有zsh、csh等等。

二、bash 编程基础

变量

  • 变量名区分大小写,a和A为两个不同的变量。
  • 变量名可以使用大小写字母混编的形式进行编写。
  • 变量名与值之间的=两侧都不能有空格。
  • 在读取或打印变量时,需使用$+变量名。
  • 变量可以写在Bash脚本中的任何地方,在运行时,Bash会自动将其替换为变量值。
  • 在 Bash 中声明变量后赋值,它会自动判断数据类型,不必在声明的同时去定义变量的数据类型

命名规则

  • 命名只能使用英文字母,数字和下划线,首个字母不能以数字开头
  • 中间不能有空格,可以使用下划线(_)
  • 不能使用标点符号
  • 不能使用bash里的关键字(可以用help命令查看保留关键字)
  • 系统定义的变量
    • 通常是以大写字母形式存在
    • 如 BASH、SHELL等
  • 用户定义的变量
    • 多数以小写字母参与命名
    • 但不具有大小写强制性规定

变量操作


定义一个只读变量a

a="123
readonly a

删除变量
unset a

变量类型

  1. 字符串
name="julia"
# 获取字符串长度 
string="abcd"
echo ${#string}   # 输出 4
#变量为数组时,${#string} 等价于 ${#string[0]}:取数组第一个元素的长度
  1. 拼接的字符串
name="Julia"
str="Hello, "$name"!"
  1. 数组
    各个值之间用空格分隔
array_name=(1 2 3 4 "hahah")
# 取单个值
value2=${array_name[2]}
echo $value2
# 单独赋值
array_name[2]=8
value3=${array_name[2]}
echo $value3
# 取所有的值
echo ${array_name[*]}
echo ${array_name[@]}

引号

  • 输入的内容为简单的字符串或文本时,单引号和双引号的作用没有任何区别
  • 输出一个已定义的变量,则需要使用双引号

数组

  • 数组可以定义为相似类型元素的集合,在bash中数组不必是相似类型元素的集合
  1. 索引数组的声明和赋值 (类似Python里的数组)
declare -a Array_Name # 索引数组
Array_Name[index_1]=value_1
Array_Name[index_2]=value_2
或
Array_Name=(
    [index_1]=value_1
    [index_2]=value_2
    )
  1. 关联数组的声明和赋值(类似Python里的字典)
declare -A Array_Name # 关联数组
Array_Name[name1]=value_1
Array_Name[name2]=value_2
或
Array_Name=(
    [name1]=value_1
    [name2]=value_2
    )
  1. 数组的访问
declare -a arr1=( hello world )
declare -A arr2=( [key1]=hello [key2]=world )
echo ${arr1[0]}
echo ${arr2[key1]}
  1. 取出所有元素
declare -a arr=( hello world )
echo ${arr[@]}
echo ${arr[*]}
# 在数组前加一个感叹号 ! 可以获取数组的所有键
declare -A site
site["google"]="www.google.com"
site["runoob"]="www.runoob.com"
site["taobao"]="www.taobao.com"
echo "数组的键为: ${!site[*]}"
echo "数组的键为: ${!site[@]}"
  1. 获取数组长度
declare -a arr=( hello world )
echo "arr length is ${#arr[@]}"
# 需要看总长度的时候使用@ 如果是当个元素长度则使用索引/key

控制语句

IF

# 单条件
if [ expression ];then statements; fi
# 多条件与
if [ expression_1 ] && [ expression_2 ];then statements; fi
# 多条件或
if [ expression_1 ] || [ expression_2 ];then statements; fi
# 多分支
if [ expression_1 ] ; then statements
elif [ expression_2 ] ; then statements
else statements
fi
  • if else 的 [...] 判断语句中大于使用 -gt,小于使用 -lt。
  • 如果使用 ((...)) 作为判断语句,大于和小于可以直接使用 > 和 <。

FOR

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done
# 写成一行
for var in item1 item2 ... itemN; do command1; command2… done;
  • in列表是可选的,如果不用它,for循环使用命令行的位置参数。

WHILE

while condition
do
    command
done

UNTIL

until condition
do
    command
done
  • until 循环执行一系列命令直至条件为 true 时停止。
  • until 循环与 while 循环在处理方式上刚好相反。
  • 一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用。

case ... esac

  • case ... esac 为多选择语句,与其他语言中的 switch ... case 语句类似,是一种多分支选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case ... esac 语句,esac(就是 case 反过来)作为结束标记。
  • case 工作方式如上所示,取值后面必须为单词 in,每一模式必须以右括号结束。取值可以为变量或常数,匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。
  • 取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。
case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

函数

  • 函数的定义格式如下:
[ function ] funname [()]

{

    action;

    [return int;]

}
  1. 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
  2. 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
# 实例
funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum  # 从终端或者文件中读取输入,读取整行输入,换行符不被读入
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum 和 $anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"  #函数返回值在调用该函数后通过 $? 来获得。
  • 脚本参数
    在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...
  1. $0 脚本名称
  2. $1~$n 获取参数
  3. $# 传递到脚本的参数个数
  4. $$ 脚本运行的当前进程ID号
  5. $* 以一个单字符串显示向所有脚本传递的参数
  6. $? 显示最后命令的推出状态。0表示没有错误,其他任何值表明有错误

标签:...,变量,echo,Bash,数组,bash,name
From: https://www.cnblogs.com/julia888/p/17446766.html

相关文章

  • bash控制台显示颜色
     #!/bin/bashfunction_info(){echo-e"\033[32m$1\033[0m"}function_warning(){echo-e"\033[33m$1\033[0m"}function_error(){echo-e"\033[31m$1\033[0m"}function_green(){ echo"\033[32m&q......
  • mac bash 下使用vi 快捷方式——因为没有alt键 所以没有办法 用vi模式也非常方便的
     set-oemacs##切到emacs模式set-ovi##切到vi模式set-o##查看当前选项的设置状态 所以你只需要在.bashrc下加入set-ovi然后,使用ESC进行行首尾,单词之间的快速跳转。......
  • 开源软件架构总结之——Bash(readline做输入交互式,词法语法分析,进程交互)
    第3章TheBourne-AgainShellBash的主要组件:输入处理,解析,单词展开(wordexpansion)和其他命令处理,管道(pipeline)中的命令执行。这些组件构成一个流水线(pipeline),从键盘或脚本中获取字符,然后逐步转化为命令。图3.1Bash组件结构 3.7.经验教训3.7.1.什么是重要的参与到Bash项目......
  • bashrc添加环境变量当用户登录时生效,等号两边不要有空格
    bashrc是Linux系统中的一种shell脚本,当用户登录时,bashrc文件会被自动执行。它是一个用于加载环境变量和自定义脚本的地方,可以用来定制您的系统环境。在本文中,我们将详细介绍如何在bashrc文件中添加环境变量。一、基础知识在开始添加环境变量之前,您需要了解bashrc文件及其作用。......
  • bash: 警告:setlocale: LC_TIME: 无法改变区域选项 (zh_CN.UTF-8)
    使用ssh远程登陆centos,出现如下告警信息:bash:警告:setlocale:LC_TIME:无法改变区域选项(zh_CN.UTF-8)原因分析:系统已经设置了默认地区_语言.字符集为zh_CN.UTF-8,但是在系统中没有定义对应的locale文件,所以只需要手动生成这个locale文件即可!解决办法:1)#vim/etc/environment......
  • linux运维之bash脚本编程
    算法+数据结构=程序编程语言分类:低级语言:机器语言:二进制码,0、1汇编语言:用一些容易理解和记忆的缩写单词来代替一些特定的指令高级语言:解释型语言:源代码-->编译-->得到二进制可执行文件-->执行eg:PHP、Python、Shell编译型语言:源代码-->执行eg:Java、C、C++、Golang动态编译语言不......
  • 自动化测试-基础知识—Bash基础
    Bash在Bash中,美元符号$可以用于引用变量或者表达式的值。Bash中的变量并不需要事先声明,而是在第一次赋值时自动创建。基于这个特性,我们可以通过给变量名加上$的方式来引用它的值,比如$var表示引用变量var的值。在Bash中,使用$还有其他一些常见的用法,例如:$0:表示执......
  • 【Shell】Display the ddl for all users in Oracle DB with bash script
     脚本说明:1、普遍用于使用expdp/impdp数据泵进行的数据(全库或者特定schemas)迁移2、适用于无PDB的Oracle环境3、适用于RAC,SI,ADG以及多实例的环境 使用方法:创建脚本为 display_all_users_ddl.sh然后将正文内容贴入并保存,然后执行bash display_all_users_ddl.sh......
  • bash有用的快捷键
    本合集力求精简,那些很多博客所谓常用但是几乎没有用武之地,简直就是脱裤子放屁的快捷键本文不会涉及清屏:Ctrl+L光标移动到行首:Ctrl+A光标移动到行尾:Ctrl+E删除光标前的字符串:Ctrl+U删除光标后的字符串:Ctrl+K还有功能等同于backspace和delete的快捷键,真是毫无用处。......
  • 自动化测试-基础知识—Bash基础
    Bash在Bash中,美元符号$可以用于引用变量或者表达式的值。Bash中的变量并不需要事先声明,而是在第一次赋值时自动创建。基于这个特性,我们可以通过给变量名加上$的方式来引用它的值,比如$var表示引用变量var的值。在Bash中,使用$还有其他一些常见的用法,例如:$0:表示执......