Liunx · 基础命令

Liunx 命令

使用 :s 命令可以实现字符串的替换

1
2
3
4
5
6
7
8
9
10
11
# 用字符串 str2 替换行中首次出现的字符串 str1
:s/str1/str2/

# 用字符串 str2 替换行中所有出现的字符串 str1
:s/str1/str2/g

# 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1
:.,$ s/str1/str2/g

# 用字符串 str2 替换正文中所有出现的字符串 str1
:1,$ s/str1/str2/g

Shell 基础

  • #! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行
1
2
#!/bin/bash
echo "Hello World !"
  • 字符串 ‘’“” 的区别:单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;双引号里可以有变量或者转义字符。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
your_name="test"

# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1

# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2 $greeting_3

# 输出结果
hello, test ! hello, test !
hello, test ! hello, ${your_name} !
  • # 开头的行就是注释。
  • 传递参数
参数处理 说明
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的当前进程 ID 号
$! 后台运行的最后一个进程的 ID 号
$@ 以 “$n” 的形式输出所有参数
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$* 与 $@ 区别:
相同点:都是引用所有参数。
不同点:" * " 等价于 "1 2 3"(传递了一个字符串参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。

#!/bin/bash
echo "-- \$* 演示 ---"
for i in "$*"; do
echo $i
done

echo "-- \$@ 演示 ---"
for i in "$@"; do
echo $i
done

# 输出结果
-- $* 演示 ---
1 2 3
-- $@ 演示 ---
1
2
3
  • 数组
1
2
3
4
5
# 获取数组所有元素 
${my_array[*]}

# 获取数组长度
${#my_array[*]}
  • 基本运算符
数字运算符 说明
-eq 检测两个数是否相等,相等返回 true。
-ne 检测两个数是否不相等,不相等返回 true。
-gt 检测左边的数是否大于右边的,如果是,则返回 true。
-lt 检测左边的数是否小于右边的,如果是,则返回 true。
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。
字符串运算符 说明
= 检测两个字符串是否相等,相等返回 true。
!= 检测两个字符串是否相等,不相等返回 true。
-z 检测字符串长度是否为 0,为 0 返回 true。
-n 检测字符串长度是否不为 0,不为 0 返回 true。
$ 检测字符串是否为空,不为空返回 true。
逻辑运算符 说明
&& 逻辑的 AND
|| 逻辑的 OR
文件运算符 说明
-d file 检测文件是否是目录,如果是,则返回 true。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。
-r file 检测文件是否可读,如果是,则返回 true。
-w file 检测文件是否可写,如果是,则返回 true。
-x file 检测文件是否可执行,如果是,则返回 true。
-s file 检测文件是否为空(文件大小是否大于 0),不为空返回 true。
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。
  • 流程控制
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
37
38
39
40
41
# if else
if condition
then
command1
command2
...
commandN
else
command
fi

# for
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done

# while
while condition
do
command
done

# case ... esac
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2
command1
command2
...
commandN
;;
esac
  • 函数
1
2
3
4
5
[ function ] funname [()]
{
action;
[return int;]
}
  • 输入、输出重定向
命令 说明
command > file 将输出重定向到 file
command < file 将输入重定向到 file
command >> file 将输出以追加的方式重定向到 file
n > file 将文件描述符为 n 的文件重定向到 file
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file
n >& m 将输出文件 m 和 n 合并
n <& m 将输入文件 m 和 n 合并
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入

注意:文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)

1
2
3
4
5
# 将 stdout 和 stderr 合并后重定向到 file
$ command > file 2>&1

# /dev/null 是一个特殊的文件,将命令的输出重定向到它,会起到"禁止输出"的效果
$ command > /dev/null 2>&1

如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null

学习资料