shell基础语法总结
admin
2024-04-03 09:21:32
0次

文中各个命令可以拿来直接进行测试,可直接在在线测试shell命令进行测试。

1. 变量

一般用法

a=1
echo "a="${a} #使用变量时用${}
echo "a="$a #$a在遇到$ab时,会出错,因此第一种较好

除了显式地直接赋值,还可以用语句给变量赋值

ls
b=`ls /box` #直接将命令执行结果赋值给变量
echo "b="${b}
b=$(ls /box) #直接将命令执行结果赋值给变量
echo "b="${b}

定义只读变量

b readonly
b=2 #为只读变量重新赋值,报错

删除变量

unset a
echo "a="${a}

2. 数组

定义数组

array=(1 2 3 4 5) # 数组用括号包围起来
echo "array[2]="${array[2]} 

打印数组

echo "数组所有元素为:"${array[*]}

打印数组长度

echo "数组长度为:"${#array[*]}

设置数组元素值

array[0]=99
echo "数组第一个元素为:"${array[0]}

3. 字符串

字符串定义

str=1 #不加引号,类型为字符串类型
echo "str="${str}
str="1" 
echo "str="${str}#加双引号,类型为字符串类型
str='1'
echo "str="${str}#加单引号,类型为字符串类型。单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;不能嵌套

字符串长度

str1="abcdefg"
echo "str的长度为:"${#str1}
echo "str的第2个字符开始,连续3个字符为:"${str1:1:3}

4. 运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

c=`expr 2 + 2` #注意数字之间的空格
echo "2+2="${c}
c=`expr 2 - 2`
echo "2-2="${c}
c=`expr 2 \* 2` # 乘号(*)前边必须加反斜杠(\)才能实现乘法运算;
echo "2*2="${c}
c=`expr 2 / 2`
echo "2/2="${c}
c=`expr 2 % 2`
echo "2%2="${c}
c=`expr 2 == 2`
echo "2==2?"${c}
c=`expr 2 != 2`
echo "2!=2?"${c}

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

$a -eq $b #判断等于
$a -ne $b #判断不等
$a -lt $b #判断小于
$a -gt $b #判断大于
$a -eq $b #判断等于
$a -le $b #判断小于等于
$a -ge $b #判断大于等于

布尔运算符

if [ !false ] #无空格
then
echo "true"
else
echo "false"
fi

或

b1=1
b2=3
if [ ${b1} -gt 0 -o ${b2} -gt 0 ] # -o表示 或
then echo "b1>0或b2>0"
elseecho "false"
fi

与

if [ ${b1} -gt 0 -a ${b2} -gt 0 ]
then echo "b1>0且b2>0"
elseecho "false"
fi

&&

if [[ ${b1} -gt 0 && ${b2} -gt 0 ]] #注意空格
thenecho "b1>0 && b2>0"
elseecho "false"
fi

||

if [[ ${b1} -gt 0 || ${b2} -gt 0 ]] #注意空格
thenecho "b1>0 || b2>0"
elseecho "false"
fi

字符串判断

#判等
if [ ${b1} = ${b2} ] # 注意这里是一个=
then echo "b1==b2"
elseecho "false"
fi#判断不等
if [ $[b1] != ${b2} ]
thenecho "b1 != b2"
elseecho "false"
fi

检测字符串是否不为空,

if [ ${b1} ]
thenecho "b1不为空"
elseecho"b1为空"
fi

文件测试运算符

#判断是目录
file=./run
if [ -d ${file} ]
then echo "false"
elseecho "不是目录"
fi#判断是文件
file=./run
if [ -f ${file} ]
thenecho "是文件"
elseecho "false"
fi

判断文件是否存在

if [ -e ${file} ]
thenecho "文件存在"
elseecho "false"
fi

5. 函数

function test(){a=$1b=$2echo "第一个参数为:"${a}echo "第二个参数为:"${b}c=`expr ${a} + ${b}`return ${c}
}
test 1 2 # 测试函数
echo "调用函数的结果为:" $? #注意:调用时用$?

6. 打印

echo "fdafd"
echo "我的名字叫\"张三\"" # \"显示转义字符
echo `ls` #显示命令执行结果
echo "123" > test # 将123写入文件test中,不追加
echo "456" >> test # 将456写入文件test中,追加
echo `cat test`
ls

7. 选择

一般的if

a=24
if [ `expr a == 2` ]
thenecho "a==2"
elseecho "false"
fi

if嵌套

if [ ${a} -gt 0 ]  #这里只做测试,忽略逻辑
thenecho "${a}>0"if [ ${a} -gt 6 ]thenecho "${a} > 6"elseecho "${a} <= 6"fi
elif [ ${a} -gt 5 ]
then   echo "${a}>5"
elif [ ${a} -gt 10 ]
then   echo "${a}>10"
elseecho "false2"
fi

8. 循环

arr=(1 2 3 4 5)
for i in ${arr[*]} # 注意这里的写法是arr[*]
doecho "当前元素为:"${i}     
doneint=1
while(( $int<=5 ))
doecho $intlet "int++" #Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量
done

相关内容

热门资讯

AI做攻略、“双向奔赴”……国... 本文转自:人民网人民网记者 许维娜今年国庆假期,AI(人工智能)成了不少年轻人的“旅行搭子”。行前做...
合肥的这个“梗”, 翻篇了 社交平台的评论区,曾长期流传一句专属于合肥的黑色幽默。有人问合肥哪里好玩,本地网友半开玩笑地回复:合...
7万+旅游中高层都在的群,今天... 做旅游这行,资源卡位、渠道互通、项目落地——往往就差一个“对的机会”。我们的行业社群已聚集70,00...
一场帐篷音乐节,如何让井研从“... 帐篷音乐节现场封面新闻记者 周洪攀10月的研溪湿地,晚风里裹着柑橘的清甜与民谣的回响。夜幕降临,10...
白鹤翩翩落星愿,上海迪士尼度假... 10月9日,世界候鸟日前夕,上海迪士尼度假区星愿公园的湖风里多了一分白鹤的灵动。三座白鹤雕塑正式揭幕...
成都锦江边赏初秋枫叶飘飘 目前,成都锦江边国华街枫叶树红了。近年来,国华街附近的几条街都栽种了红枫树,是城区较集中看枫叶的点位...
GBTA:商务旅行正在复苏,但... 亚太正在成为全球商务旅行增长的重要引擎。在经历疫情后的快速反弹之后,全球商务旅行正在进入一个新的增长...
从景区焕新到节赛引流 邹城双节... 齐鲁网·闪电新闻10月9日讯 中秋、国庆“双节”假期,邹城市文化和旅游局提前谋划、周密部署,立足自身...
江山如此多娇 且看石楼今朝 金秋十月,黄河岸畔秋意盎然,丰收盛会喜迎国庆。本次石楼国庆文旅活动以“江山如此多娇,且看石楼今朝”为...
海南国庆假期接待游客475.4... 2026年国庆假期,海南接待游客475.40万人次,较2025年增长13.1%,较2024年增长15...