一、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
(())
使用方法:文章来源:https://www.toymoban.com/news/detail-707558.html
- ((表达式1,表达式2,表达式3,····))每一个表达式都会执行,取到最后一个表达式的结果
- (())内使用变量时,可以加$也可以不加$
- (())内的运算符两侧,可以有空格也可以没有空格
- 变量名=$((表达式)),获取(())的运算结果
- 可以直接在(())内进行赋值操作,((var1 = var1+var2))
$[]
使用方法: (仍然支持幂运算和自增自减运算)
- 变量名=$[表达式1,表达式2,表达式3,····],每一个表达式都执行,获取最后一个表达式的结果
- 运算时,运算符两侧可以有空格也可以没有空格
- 使用变量时,可以加$也可以不加$
- $[]本质上会遗留一个计算结果在,运算所在行,可以选择直接echo $[表达式] ,变量名=$[表达式]
let
使用方法:
- let 变量名=表达式 ----->let和变量名中间一定有空格
- let使用变量可以加$,也可以不加$
- let运算时,运算符两侧一定不能有空格
- let 表达式,运算是可以进行的但是没有办法接收运算的结果
expr
expr是一条指令
使用方法:
- expr使用变量的值时,必须加$
- 运算符两侧必须加空格 (不支持幂运算和自增自减运算)
- expr在使用时,一些字符需要转义,*,>,<,&,|······(简单的expr语句,可以先在命令行敲出来,出现语法错误说明有转义字符)
- expr直接回显指令的执行结果到终端
expr对字符串的运算文章来源地址https://www.toymoban.com/news/detail-707558.html
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
到了这里,关于C高级 DAY3的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!