Linux Shell笔记(基础变量与运算符)

本文介绍了Linux Shell中的变量命名规则、变量类型,包括只读变量、局部变量和环境变量。讲解了如何使用和删除变量,以及字符串的处理,如拼接、长度获取和截取。此外,还探讨了数组的定义和操作,以及Shell中的注释、参数传递和各种运算符,包括算数、关系、布尔和字符串运算符,以及文件测试运算符。文章通过示例展示了如何在Shell脚本中进行算术计算和条件判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Shell 变量

变量名命名规则:

  • 首个字符必须为字母
  • 中间不能有空格,可以使用下划线
  • 不能使用标点符号
  • 不能使用 bash里的关键字

your_name="shell"

使用变量:
echo ${your_name}

只读变量:
readonly your_name

删除变量:(不能删除只读变量)
unset your_name


变量类型
  • 局部变量:在脚本或命令中定义,仅在当前 shell实例中有效,其他 shell启动的程序不能访问局部变量
  • 环境变量:所有程序(包括 shell启动的程序)都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候 shell脚本也能定义环境变量
  • shell 变量:由 shell程序设置的特殊变量。shell 变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了 shell的正常运行
  • shell 字符串:
    字符串可以用单引号、双引号,也可以不用引号
    • 单引号:
      1)单引号里的任何字符都会原样输出,变量是无效的;
      2)单引号字符串里不能出现单引号,使用转义字符的单引号也不行
    • 双引号:
      1)双引号里可以有变量;
      2)双引号里可以出现转义字符

拼接字符串:
echo "hello, "${your_name}" !"
echo "hello, ${your_name} !"

获取字符串长度:
echo ${#your_name}

截取:(从第三个开始截取三个)
echo ${your_name:2:3}

查找:
your_name=“bashshell”
echo expr index ${your_name} e //输出7

  • shell 数组:
    • bash 支持一维数组,不支持多维数组,并且没有限定数组的大小
    • 数组用括号表示,元素之间用空格分开
    • 初始化时不需要定义数组的大小,数组元素的下标从0开始

定义数组:
arr=(val1 val2 val3…)
arr[0]=val1

读取数组:
val=${arr[0]}

val=${arr[@]} //所有元素

获取数组长度:
len=$ {#arr[@]} //数组元素个数
len=$ {#arr[*]}
len=${#arr[0]} //单个元素的长度

  • shell 注释:
    以 # 号开头的为注释

  • shell 参数传递:

./test.sh 3 2 1
echo "当前执行的文件:${0}"
echo "第一个参数:${1}"
echo "第二个参数:${2}"
echo "第三个参数:${3}"
echo "参数个数:$#"
echo "以一个单字符串显示所有向脚本传递的参数:$*"  //"$1 $2 … $n"
echo "脚本运行的当前进程ID号:$$"
echo "后台运行的最后一个进程的ID号:$!"
echo "返回每个参数:$@"  //"$1" "$2" … "$n" 
echo "显示Shell使用的当前选项:$-"
echo "显示最后命令的退出状态:$?"  //0表示没有错误,其他任何值表明有错误

shell 运算符

和其他编程语言一样,支持多种运算符

  • 算数运算符
  • 关系运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符

原生 bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr
expr是一款表达式计算工具,它能完成表达式的求值操作(使用反引号)

两个数相加:
val=`expr 2 + 2`
注意:表达式和运算符之间要有空格;完整的表达式要被 ``(反引号) 包含

算数运算符

a=10
b=20

val=`expr $a + $b`
echo “a + b : $val”

val=`expr $a - $b`
echo “a - b : $val”

val=`expr $a \* $b` //乘号前面必须加反斜杠
echo “a * b : $val”

val=`expr $b / $a`
echo “b / a : $val”

val=`expr $b % $a`
echo “b % a : $val”

if [ $a == $b ] //条件表达式要放在方括号之间,并且要有空格
then
echo “a 等于 b”
fi
if [ $a != $b ]
then
echo “a 不等于 b”
fi

关系运算符
只支持数字,不支持字符串,除非字符串是数字

运算符描述举例a=10 b=20
-eq比较两个数是否相等,相等返回true[ $a -eq $b ]返回false
-ne不相等返回true[ $a -ne $b ]返回true
-gt左边是否大于右边,大于返回true[ $a -gt $b ]返回false
-lt左边是否小于右边,小于返回true[ $a -lt $b ]返回true
-ge左边是否大于等于右边,返回true[ $a -ge $b ]返回false
-le左边是否小于等于右边,返回true[ $a -le $b ]返回true

布尔运算符

运算符描述举例a=10 b=20
运算[ ! false ]返回true
-o运算[ $a -lt 20 -o $b -gt 100 ]返回true
-a运算[ $a -lt 20 -a $b -gt 100 ]返回false

逻辑运算符

运算符描述举例$a=10 $b=20
&&逻辑[[ $a -lt 100 && $b -gt 100 ]] 返回 false
//逻辑[[ $a -lt 100 // $b -gt 100 ]] 返回 true

字符串运算符

运算符描述举例a=‘abc’ b=‘efg’
=两个字符串相等返回true[ $a = $b ]返回false
!=不相等返回true[ $a != $b ]返回true
-z字符串的长度,为0返回true[ -z $a ]返回false
-n字符串的长度,不为0返回true[ -n $a ]返回true
str字符串不为空返回true[ $a ]返回true

文件测试运算符

运算符描述举例file=‘test.sh’
-b块文件设备返回true[ -b $file ]返回false
-c字符设备文件返回true[ -c $file ]返回false
-d目录返回true[ -d $file ]返回false
-f普通文件返回true[ -f $file ]返回true
-g文件设置了SGID位返回true[ -g $file ]返回false
-k文件设置了粘着位(Sticky Bit)返回true[ -k $file ]返回false
-p文件是具名管道返回true[ -p $file ]返回false
-u文件设置了SUID位返回true[ -u $file ]返回false
-r可读文件返回true[ -r $file ]返回true
-w可写文件返回true[ -w $file ]返回true
-x可执行文件返回true[ -x $file ]返回true
-s文件不为空返回true[ -s $file ]返回true
-e文件存在返回true[ -e $file ]返回true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值