-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathweek 1
107 lines (94 loc) · 2.25 KB
/
week 1
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
1. 创建一个别名 rm, 它能删除原始文件,同时在backup目录中保留副本
alias rm='cp $@ ~/backup && rm $@'
2. 利用tput或者stty实现对终端命令行设置
#!/bin/sh
#Filename: password.sh
echo -e 'Enter password:"
# 在读取密码前禁止回显
stty -echo
read password
# 重新允许回显
stty echo
echo
echo Password read.
3. 计时器
#!/bin/bash
echo Count:
tput sc # 存储光标
#循环40秒
for count in `seq 0 40`
do
tput rc # 恢复之前存储的光标位置
tput ed # 清楚从当前光标位置到行尾之间的所有内容
echo -n $count
sleep 1
done
4. 传入脚本的参数
$0是脚本名称
$1是第一个参数
$2是第一个参数
$n是第n个参数
$@ 被扩展为“$1, $2, $3"等
$* 被扩展为"$1c$2c$3", 其中c是IFS的第一个字符
$@ 比 $* 用的多,由于 $* 将所有参数当作单个字符串, 因此很少被使用
5. 报告脚本是否成功结束
#!/bin/bash
#Filename: success_test.sh
#对命令行参数求值,比如success_test.sh 'ls | grep txt'
eval $@
if [ $? -eq 0 ];
then
echo "$CMD executed successfully"
else
echo "$CMD terminated unsuccessfully"
fi
6. 脚本访问多个参数 p33
for i in `seq 1 $#`
do
echo $i is $1
shift
done
7. 子shell法
利用()定义
(cd /bin; ls) (ls | cat -n)
为了保留换行符(\n)必须使用双引号
out="$(cat text.txt)"
8. 循环语句
for循环 -1
for var in list;
do
command;
done;
for循环 -2
for i in {a..z};do actions; done;
for循环 -3
for((i=0;i<10;i++))
{
commands;
}
while循环
while condition
do
commandsl
done;
until循环
x=0;
until [ $x -eq 9];
do
let x++; echo $x;
done
9. 条件语句
if condition;
then
commands;
elif condition;
then
commands
else
commands
fi
# ifelse 嵌套
[ condition ] && action; #if true, action
[ condition ] || action; # if false, action
[ $var -ne 0 -a $var2 -gt 2 ] # 逻辑与
[ #vat -ne 0 -o $var2 -gt 2 ] # 逻辑或