shell笔记

shell笔记

  • 声明脚本执行器

1
#!/usr/bin/bash

可以用命令which bash查看bash位置

  • shell传递参数

1
./test.sh 1 2 3 4

$1接受参数1 , $2接受参数2……

  • 算数运算符

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
a=$1
b=$2
val=`expr $a + $b`
echo "a + b = $val"
val=`expr $a - $b`
echo "a - b = $val"
val=`expr $a \* $b`
echo "a * b = $val"
val=`expr $a / $b`
echo "a / b = $val"

if [ $a == $b ]
then
echo "a is equal to b"
fi
if [ $a != $b ] #严格遵循空格
then
echo "a isn't equal to b"
fi

乘法需用\*转义表示

关系运算符

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
31
32
33
34
35
36
if [ $a -eq $b ]
then
echo "$a -eq $b : a 等于 b"
else
echo "$a -eq $b: a 不等于 b"
fi
if [ $a -ne $b ]
then
echo "$a -ne $b: a 不等于 b"
else
echo "$a -ne $b : a 等于 b"
fi
if [ $a -gt $b ]
then
echo "$a -gt $b: a 大于 b"
else
echo "$a -gt $b: a 不大于 b"
fi
if [ $a -lt $b ]
then
echo "$a -lt $b: a 小于 b"
else
echo "$a -lt $b: a 不小于 b"
fi
if [ $a -ge $b ]
then
echo "$a -ge $b: a 大于或等于 b"
else
echo "$a -ge $b: a 小于 b"
fi
if [ $a -le $b ]
then
echo "$a -le $b: a 小于或等于 b"
else
echo "$a -le $b: a 大于 b"
fi

显示命令执行结果

1
echo `date`

shell输入

1
2
read name
echo "$name is excellent!"

for循环

1
2
3
4
for loop in 1 2 3 4 5
do
echo "loop is $loop"
done

while循环

1
2
3
4
5
6
int=5
while [ $int -ge 0 ]
do
echo "int = $int"
let "int--"
done

sed -i

sed是一个在Unix和类Unix环境中使用的流编辑器,它可以对输入的文本(文件或管道)进行基本的文本转换。

1
sed -i 's/old_string/new_string/g' filename
  • -i:表示直接修改文件内容,而不是输出到标准输出。
  • s:表示替换操作。
  • old_string:要被替换的字符串。
  • new_string:用于替换的新字符串。
  • g:表示全局替换,即一行中的所有匹配都会被替换。
  • filename:要进行替换的文件名。
1
sed -i '10c apple' banana.txt
  • banana.txt的第十行修改成apple.

grep命令

正则匹配字符串

1
2
3
4
5
benkangpeng@DESKTOP-FR84659:~/helloworld$ ls | grep ".v"
count4.v
count4_tb.v
counter.v
shift_register.v

↑匹配显示所有.v后缀的文件