【shell命令】变量

变量基础知识

定义变量不加$,使用变量加$
your_name="qinjx"
echo $your_name # 或${your_name}

数值运算:$((表达式))
案例:

cc=$((aa+bb))	

declare

选项:

-		--给变量设定类型属性
+		--取消变量类型属性
-i		--将变量声明为整数类型
-x		--将变量声明为环境变量
-p		--显示指定变量被声明类型
# 使用 declare 声明一个整数变量  
declare -i int_var=10  
echo $int_var  
  
# 使用 declare 声明一个只读变量  
declare -r readonly_var="Hello, World!"  
# 尝试修改 readonly_var 会导致错误  
# readonly_var="This won't work"  
  
# 声明一个数组  
declare -a array_var=("element1" "element2" "element3")  
echo ${array_var[1]}

变量命令

set	--查看所有变量
env		--查看环境变量
export	--设置环境变量
readonly var1    -- 将变量设置为只读变量
unset var1	-- 删除变量

read:(接收键盘输入)
 read:
选项:
-p:提示信息
-t:秒数
-n:字符数
-s:隐藏输入的数据
   	案例:
read -p "input param1:" param1		--param1是变量名

预定义变量

$?	--上一条命令执行返回状态,0表示执行成功,非0表示失败
$$	--当前进程的进程号
$!	--后台运行的最后一个进程的进程号

变量类型

  • 局部变量
    局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  • 环境变量
    所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  • shell变量
    shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

环境变量

$PATH --系统查找命令的路径
环境变量配置文件:

/etc/profile			--对所有用户生效
/etc/profile.d/*.sh		--对所有用户生效
/etc/bashrc			--对所有用户生效
~/.bash_profile
~/.bashrc

shell变量

$HOME:家目录
$PWD:当前目录
$SHELL:当前使用的shell

参数变量

$n	--$0代表命令本身、$1-$9代表1到9变量
$#	--参数个数
$*	--所有参数,所有参数看作一个整体
$@	--所有参数,每个参数是单独的(可以for循环)

字符串变量

字符串可以用单引号、双引号、也可以不用引号

str1='aaa'
str2="bbb"
str3=ccc

单引号和双引号的区别

单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现
双引号里可以有变量;双引号里可以出现转义字符

查找字符

string="runoob is a great site"
echo expr index "$string" o # 输出 4

${} 用于参数扩展和变量操作

变量引用

name="World"  
echo "Hello, ${name}!"  # 输出:Hello, World!

提取子字符串

str1='aaabbb'
echo ${str1:1:3}	#从第二个字符开始截取4个字符

获取字符串长度

str1='aaa'
echo ${#str1}		#  输出3

字符串替换

${variable/pattern/replacement}:在变量 variable 中,将第一个匹配 pattern 的子串替换为 replacement。
${variable//pattern/replacement}:将 variable 中所有匹配 pattern 的子串替换为 replacement。

path="/home/user/dir"  
echo "${path/dir/folder}"  # 输出:/home/user/folder  
echo "${path////}"        # 删除所有斜杠,输出:homeuserfolder

默认值和空值检查

${variable:-default}:如果 variable 未设置或为空,则使用 default。
${variable:=default}:如果 variable 未设置或为空,则设置其值为 default。

name=""  
echo "${name:-Anonymous}"  # 输出:Anonymous  
echo "$name"               # 输出:(空)  
  
name=${name:-Anonymous}  
echo "$name"               # 输出:Anonymous

模式匹配和删除

${variable#pattern}:从 variable 的开头删除最短匹配 pattern 的子串。
${variable##pattern}:从 variable 的开头删除最长匹配 pattern 的子串。
${variable%pattern}:从 variable 的末尾删除最短匹配 pattern 的子串。
${variable%%pattern}:从 variable 的末尾删除最长匹配 pattern 的子串。

url="http://example.com/path/to/file.txt"  
echo "${url#http://}"       # 输出:example.com/path/to/file.txt  
echo "${url##*/}"           # 输出:file.txt

大小写转换(Bash 4.0+):

${variable^^}:将 variable 中的所有小写字母转换为大写。
${variable,,}:将 variable 中的所有大写字母转换为小写。

name="hello world"  
echo "${name^^}"    # 输出:HELLO WORLD  
echo "${name,,}"    # 输出:hello world

数组:

${array[@]} 或 ${array[]}:引用数组的所有元素。
${#array[@]} 或 ${#array[
]}:获取数组的长度。
${array[index]}:引用数组中索引为 index 的元素。

数组变量

#! /bin/bash

#定义数组1
arr1=(1 2 3 4)
or
arr1=(
1
2
3
4
)

#定义数组2
arr2[0]=1
arr2[1]=2
arr2[2]=3

#输出指定下标元素
echo ${arr1[0]}
echo ${arr2[1]}

#输出全部元素
for i in ${arr1[*]}
do
echo $i
done

#输出全部元素
for i in ${arr2[@]}
do
echo $i
done

#数组长度
echo ${#arr1[*]}
echo ${#arr2[@]}
posted @ 2022-06-12 15:31  .Neterr  阅读(127)  评论(0编辑  收藏  举报