shell变量详解

1 创建变量

xpz=xiaopzi

2 读取变量

(1)echo ${xpz}
(2)echo $xpz
(3)注意:echo ${xpz}s 和 echo $xpzs 输出是不一样的

3 撤销变量

unset xpz
unset -f 函数名 //撤销函数
小结:bash是弱类型语言,默认会把变量当成字符串处理,所以,我们可以认为bash中的变量值都是字符串。

变量是存在作用域的概念的,按照作用域划分:本地变量和环境变量

本地变量

本地变量的作用域:只对当前bash进程有效,对当前shell之外的其他shell进程,包括当前shell的子进程都无效
本地变量还分为:局部变量和全局变量
局部变量创建方式:local varname=value
局部变量的作用域:局部变量只对当前函数或者代码段有效

环境变量

声明方式:export varname=value
作用域:当前shell进程以及子进程

脚本执行方式

1 source ./test.sh
. /root/test/test.sh
点 空格 脚本全路径
//表示脚本在当前进程执行
2 ./test.sh //打开一个子进程

只读变量

声明方式:readonly varname=value
不可修改,不可撤销(unset),如果想让只读变量消失,只能退出当前shell
作用域:和本地变量一样,如果想让子shell进程继承,只能变成环境只读变量

环境只读变量

声明方式:export readonly varname=value

特殊变量

$? 保存了上一个命令执行状态返回值
范围:0-255 0表示成功

位置变量
$# 表示传入脚本参数的个数
$@ 参数列表,获取到所有参数
$* 参数列表 同$#
${@:起点} 表示由起点开始(包括起点),取得后面的所有位置的参数
${@:起点:个数} 表示由起点开始(包括起点),取得后面的指定位置的参数
注意:当我们直接使用$和$@的时候,是没有区别的。但是,在对$和$@加引号后,变成"$","$@"后,这两种写法就有区别了
"$
",传递给脚本所有参数,全部参数合为一个字符串
"$@",传递给脚本所有参数,每个参数为独立字符串

$0表示脚本自身,相当于basename输出的内容

$1,$2等 用来在脚本内引用传入脚本的参数值

其他声明变量的方法

declare
declare -i varname=value 整形
declare -x varname=value 环境变量
declare -r varname=value 只读变量

参数也可以混合使用
declare -rx varname=value 被继承的只读环境变量

shell进行运算的各种方法

(1) 使用let命令进行算术运算,只支持整形运算
(2) 使用expr命令进行算术运算,只支持整数运算
(3) 使用bc命令进行算数运算,支持小叔运算
(4) 使用运算符:$[算术表达式],只支持整数运算
(5) 使用运算语法:$((算术表达式)),只支持整数运算
(6)在初始化变量时,将变量定义定义为‘整数’类型,则可直接进行整数运算

shell中的逻辑运算/布尔运算/短路与/短路或

shell中组合命令的方法

1 小括号() ,在子进程中执行
(ls test;ls test2) | wc -l
2 大括号{},在当前进程中执行
{ls test; ls test2} | wc -l
注意:大括号里的所有命令都是用空格隔开,而且每个命令都必须以";"结尾,即使是最后一个命令也的这样

shell中的‘-gt’与‘>’的区别

在shell中,"-gt"或者"-lt"只能用于比较两个数字的大小,当我们想要比较两个字符串的ASCLL值时,则必须使用">"或者"<",需要注意的是,当使用“双中括号”进行碰到时,">"或者"<"不用转椅即可正常使用,当使用”单中括号“进行碰到时,">"或者"<"需要转移后才能正常使用

bash中[]和[[]]的区别

shell中常用变量处理,字符串操作

1 获取变量的长度

name=xiaopzi
echo ${name} //打印变量
echo ${#name} //打印变量长度,多了个"#"

2截取变量

(1)从指定位置开始截取字符串
name=www.gsw6.com
echo ${name:4} //gsw6.com
":4"表示从第四个开始,截取到末尾
echo ${name:0-4} //.com
"0-4"表示截取最后四个字符串
echo ${name: -4} //.com
" -4"和"0-4"相同的作用,只不过用空格代替了0
(2)从指定位置开始截取字符串,并且指定截取字符串长度
echo ${name:4:4} //ling
":4:4"表示从正数第四个字符串开始截取,向后截取4个字符的长度
echo ${name:0-9:4} //uncm
"0-9:4"表示从倒数第九个开始,向后截取4个
(3)掐头去尾截取之掐头截取
echo ${name#.} //gsw6.com
"#
."表示删除字符串从左到右第一个"."以及其左侧的全部字符。
echo ${name##.} //com
"##
."表示删除从左到右最后一个遇到的".",以及其左侧的字符
(4)掐头去尾截取之去尾截取
echo ${name%.//www.gsw6.com
echo ${name%%.
} //www

替换变量中的字符串

name=www.gsw6.com
echo ${name/w/a} //aww.gsw6.com
"/w/a"表示替换字符串中的w为a,需要助于的是,他只替换第一个遇到的w,如果包含多个,其他的不会被替换
echo ${name//w/a} //aaa.gsw6.com
"//w/a"表示把字符串中所有w换成a
name=www.linux.www
echo ${name/#www/aaa} //aaa.linux.www
"#"只替换开头的
echo ${name/%www/aaa} //www.linux.aaa
"%"只替换结尾的

删除变量中的字符串

name=www.gsw6.com
echo ${name/w} //ww.gsw6.com
'/w'删除字符串中第一个遇到的w
echo ${name//w} //.gsw6.com
'//w'删除字符串中所有w
name=www.gsw6.www
echo ${name/#www} //.gsw6.www
只删除头部的www
echo ${name/%www} //www.gsw6.com.
只删除尾部的www

相关推荐

  1. shell变量详解

    2024-01-02 10:24:01       32 阅读
  2. shell 变量

    2024-01-02 10:24:01       9 阅读
  3. shell变量和引号!

    2024-01-02 10:24:01       14 阅读
  4. shell脚本变量

    2024-01-02 10:24:01       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-02 10:24:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-02 10:24:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-02 10:24:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-02 10:24:01       20 阅读

热门阅读

  1. Android中线程间的通信-Handler

    2024-01-02 10:24:01       33 阅读
  2. 浪潮软件开发校招面试一面凉经

    2024-01-02 10:24:01       38 阅读
  3. 逻辑运算符——and和&的区别

    2024-01-02 10:24:01       35 阅读
  4. Pytest单元测试系列[v1.0.0][pytest插件常用技巧]

    2024-01-02 10:24:01       39 阅读
  5. Sql优化

    Sql优化

    2024-01-02 10:24:01      28 阅读
  6. 腾讯云轻量应用服务器和CVM云服务器哪个好用?

    2024-01-02 10:24:01       44 阅读
  7. font-face和font-family不生效

    2024-01-02 10:24:01       44 阅读
  8. VCG 计算两点之间距离

    2024-01-02 10:24:01       41 阅读
  9. 基于bp神经网络变压器的故障分类

    2024-01-02 10:24:01       39 阅读
  10. 【AI】免费搭建一个属于自己的GeminiProGpt

    2024-01-02 10:24:01       39 阅读
  11. Linux高并发服务器开发之网络编程

    2024-01-02 10:24:01       39 阅读