C高级 DAY3
一、shell中的变量
shell本身是擅长运行指令,是一种弱数据类型语言
它与c语言中定义变量有所不同
C中:存储类型 数据类型 变量名; shell中:变量=变量的值 ----->如果变量的值中间没有空格直接使用变量='变量的值' ----->变量的值中间有空格变量="变量的值" ----->使用一个已有的变量给新的变量赋值,并且赋值中有空格时''内,$变量名,不会被展开
注意:shell中等号两边不允许有空格,空格会被识别为一个指令
使用变量时在变量前加$
$变量名 ${变量名} 无法区分变量名时使用
不使用${变量名}
name="John"echo "$nameDoe" # 这将不会输出任何东西,因为Shell会尝试查找一个名为nameDoe的变量
使用${变量名}
name="John"echo "${name}_Doe" # 这将输出 "John_Doe"
shell脚本的本质:命令的集合
修饰变量关键字
readonly ---->只读不能修改unset ---->清空变量(不能清空只读(readonly)的变量)local ---->定义局部变量(只能在函数中使用)
位置变量
用来接收脚本的外部传参(在命令行传递过来)
$数字
注意:9以上的数字需要加{}如${10} ${11}...
命令置换符
拿到指令输出的结果(赋值给变量)
sudo apt-get install lolcat
自动换行`` :反引号,esc键下面就是`` ----->常用$()
二者是一个效果,只是想要使用反引号得需要下载
$()
:命令替换 ${}
:变量替换或变量操作
二、shell中的数组
C中int arr[4]={1,2,3,4}; shell:数组名=(1 2 3 4) ----->每个元素之间以空格作为分隔 shell中支持稀疏数组数组名=([下标]=初始值1 [下标]=初始值2 ·····) #!/bin/bash arr=(12 90 89 100) #shell中支持稀疏数组,下标不连续的数组 brr=([0]=90 [3]=70 [7]=900) crr[0]=29 #给crr数组中下标为0的元素赋值 crr[3]=78 #给crr数组中下标为3的元素赋值 #再重新给brr中没有提供的下标的元素赋值 brr[4]=67 echo ${brr[4]} echo ${crr[3]}
访问数组中的所有元素
${数组名[*]} ${数组名[@]}
如果要记录数组中元素个数
${#数组名[#]}
三、shell中的输入输出
输出
echo 默认不解析转义字符并且会自动换行
-e:让echo指令解析转义字符
-n:取消换行
输入
read 变量名
read -s 变量名 ---->输入的内容不回显
read -p "提示信息" 变量名 ----->-p回显提示信息
read -n 字符个数 变量名 ----->控制输入的字符个数,当超过会自动停止
read -t 秒数 变量名 ----->控制读入数据的时间,如果指定时间内不输入会自动停止
read -a 数组名 ---->输入数组
四、shell中的算术运算
shell本身不擅长算术运算,需要借助于运算符和其他指令
(()) $[] let expr
(())
使用方法:
- ((表达式1,表达式2,表达式3,····))每一个表达式都会执行,取到最后一个表达式的结果
- (())内使用变量时,可以加$也可以不加$
- (())内的运算符两侧,可以有空格也可以没有空格
- 变量名=$((表达式)),获取(())的运算结果
- 可以直接在(())内进行赋值操作,((var1 = var1+var2))
$[]
使用方法: (仍然支持幂运算和自增自减运算)
- 变量名=$[表达式1,表达式2,表达式3,····],每一个表达式都执行,获取最后一个表达式的结果
- 运算时,运算符两侧可以有空格也可以没有空格
- 使用变量时,可以加$也可以不加$
- $[]本质上会遗留一个计算结果在,运算所在行,可以选择直接echo $[表达式] ,变量名=$[表达式]
let
使用方法:
- let 变量名=表达式 ----->let和变量名中间一定有空格
- let使用变量可以加$,也可以不加$
- let运算时,运算符两侧一定不能有空格
- let 表达式,运算是可以进行的但是没有办法接收运算的结果
expr
expr是一条指令
使用方法:
- expr使用变量的值时,必须加$
- 运算符两侧必须加空格 (不支持幂运算和自增自减运算)
- expr在使用时,一些字符需要转义,*,>,<,&,|······(简单的expr语句,可以先在命令行敲出来,出现语法错误说明有转义字符)
- expr直接回显指令的执行结果到终端
expr对字符串的运算
match str1 str2 返回str2在str1中完全匹配的个数(str2可以作为str1中子串) substr STRING POS LENGTH 如果字符串长度不够截取长度,就把字符串中所有的内容都截取出来 从string中的第pos个位置开始截取长度为length的子串(pos从1开始) index STRING CHARS 返回字符在字符串中第一次出现的位置,如果是多个字符,返回最先在字符串中出现的字符的下标 (下标从1开始) length STRING 求字符串的长度
五、shell中的分支语句
if...else分支
[]就是test指令#单分支结构if [ test语句 ] -----> if test 表达式 then 语句块fi #双分支if [ test语句 ] -----> if test 表达式 then 语句块else 条件不成立执行的语句块fi #多分支语句if [ test语句 ] -----> if test 表达式 then 语句块elif [ test语句 ] ------> elif test 表达式 then 条件不成立执行的语句块fi #!/bin/bash num1=90 num2=300 #if [ $num1 -le $num2 ] if test $num1 -le $num2 then echo "num1<=num2" fi
来源地址:https://blog.csdn.net/weixin_69028524/article/details/132791520
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341