临街小站

shell学习记录

shell学习

最简单的shell命令:

1
2
#!/bin/bash
echo "hello world"

保存为test.sh,为该文件添加x权限chmod +x test.sh,随后使用./test.sh执行该脚本

变量

shell中可以像其他语言中一样定义变量/使用变量,需要注意的是,变量定义的时候等号前后不要有空格;在使用变量的时候,要在变量名前面添加$访问

1
2
3
4
5
#!/bin/bash
myText="hello world"
myNum=100
echo $myText
echo myNum

执行脚本,返回结果:

1
2
hello world
myNum

使用$符号的变量可以正常被访问,否则输出的将是纯文本内容

运算符

1
2
3
4
5
6
7
8
#!/bin/bash
echo "hello world!"
a=3
b=5
val=`expr $a + $b`
echo "Total value : $val"
val=`expr $a - $b`
echo "Total value : $val"

几个注意的点:val定义的时候,符号既不是双引号也不是单引号,而是反单引号,同时要在前面加上expr关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
echo "hello world!"
a=3
b=5
val=`expr $a + $b`
echo "Total value : $val"
val=`expr $a - $b`
echo "Total value : $val"

if [ $a == $b ]
then
echo "a is equal to b"
fi
if [ $a != $b ]
then
echo "a si not equal to b"
fi

if [ $a == $b ]
then
echo "a is equal to b"
elif [ $a -gt $b ]
then
echo "a is greater than b"
elif [ $a -lt $b ]
then
echo "a is less than b"
else
echo "None of the condition met"
fi

其他一些关键字,要注意的是,[ $a == $b ]两个变量不要跟括号相邻

关系运算符

字符串运算符

文件运算符

字符串操作

1
2
3
4
5
6
7
#!/bin/bash
mtext="hello"
mtext2="world"
mtext3=$mtext" "$mtext2
echo $mtext3
echo ${#mtext3}
echo ${mtext3:1:4}

输出结果:

1
2
3
hello world
11
ello

数组操作

1
2
3
4
5
6
7
8
array=(1 2 3 4 5)
array2=(aa bb cc dd ee)
value=${array[3]}
echo $value
value2=${array2[3]}
echo $value2
length=${#array[*]}
echo $length

输出结果为:

1
2
3
4
dd
5

其他

1
2
3
echo "hello \n world"
echo "hello world" > a.txt
echo `date`

以上三个语句分别是输出换行后的hello world,将内容hello world重定向到文件a.txt,以及最后的输出日期功能

循环

for循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
for i in {1..5}
do
echo $i
done

for i in 5 6 7 8 9
do
echo $i
done

for File in ./*
do
echo $File
done

while循环

1
2
3
4
5
6
7
8
9
10
11
12
counter=0
while [ $counter -lt 5 ]
do
counter=`expr $counter + 1`
echo $counter
done


while read FILM
do
echo "the file name is $FILM"
done

第二个循环需要手动停止循环,程序接受标准输入,并将其输出

函数

1
2
3
4
5
6
7
8
test(){
aNum=3
bNum=5
return $(($aNum+$bNum))
}
test
res=$?
echo $res

带参数函数

1
2
3
4
test(){
echo $1" "$2" "$3
}
test 1 2 3

需要注意的是,当参数数量大于10的时候,$10不能获取第10个参数,需要使用${10}

clinjie wechat
Think about u every day