Shell入门实例

控制字符

常见的控制字符有:&&&||;|

&: 将命令在后台执行
&&: 前面的命令执行成功,后面的命令才会执行
||: 前面的命令执行失败,后面的命令才会执行
;:命令顺序执行,前面的命令执行成功与否,后面的命令都会执行
|:管道符,前面命令的执行结果是后面命令的输入

实例

将命令在后台执行,可通过 jobs 命令查看当前后台执行的命令

1
java -jar Test &

当test.txt存在时,查看该文件,只有ls test.txt执行成功后,才会执行 后面的 cat test.txt

1
ls test.txt && cat test.txt

如果有gedit编辑器则打开该程序,否则打开vim编辑器

1
gedit || vim

命令依次执行,无论前面命令是否执行成功,后面的命令都会执行

1
ls /tmp ; ls /root ; ls /home

查看test.txt文件,并屏蔽其输出(扔到了 /dev/null黑洞里),如果前面命令执行成功,说明文件存在,则打印出文件存在,如果执行失败,说明文件不存在,则打印文件不存在

1
cat test.txt > /dev/null && echo "文件存在" || echo "文件不存在"

输出当前进程中有bash关键字的进程,前面ps -a的输出结果,是 grep bash 的输入参数

1
ps -a | grep bash

参数变量

  • $@所有参数列表,与 $*效果相同
  • $$ Shell本身的PID
  • $0: Shell本身的文件名
  • $1~n 参数值,$1为第一个参数,$2为第二个参数。。。

实例

1
2
3
4
#!/bin/sh
echo "shell脚本本身的名字: $0"
echo "传给shell的第一个参数: $1"
echo "传给shell的第二个参数: $2"

将其保存为 test.sh,执行

1
bash Test.sh 1 2

输出结果

1
2
3
shell脚本本身的名字: test.sh
传给shell的第一个参数: 1
传给shell的第二个参数: 2

常用脚本demo
函数声明一定要在函数调用前面,不然会找不到,切记,和高级语言不一样!

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
#!/bin/bash
run() {
echo "启动 $1 程序"
}

stop(){
echo "关闭 $1 程序"
}

restart() {
echo "重启动 $1 程序"
stop "$1"
run "$1"
}

# 帮助文档
usage() {
echo "start: 启动程序 build.sh start 程序名"
echo "stop: 停止程序 build.sh stop 程序名"
echo "restart: 重启程序 build.sh restart 程序名"
}

main() {
case $1 in
start)
run $2
;;
restart)
restart $2
;;
stop)
stop $2
;;
*)
usage
;;
esac
}
# 执行main 函数,并将所有参数传递过去
main "$@"

使用

1
./build.sh stop docker

echo输出彩色字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"


echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;37m 红底白字 \033[0m"
echo -e "\033[42;37m 绿底白字 \033[0m"
echo -e "\033[43;37m 黄底白字 \033[0m"
echo -e "\033[44;37m 蓝底白字 \033[0m"
echo -e "\033[45;37m 紫底白字 \033[0m"
echo -e "\033[46;37m 天蓝底白字 \033[0m"
echo -e "\033[47;30m 白底黑字 \033[0m"
-------------本文结束感谢您的阅读-------------