shell知识点快速入门(复习)笔记(后)
shell知识点快速入门(复习)笔记(前)](https://blog.csdn.net/lovedingning/article/details/107221159)
test 命令
数值测试
参数 | 说明 |
---|---|
-eq | 等于 |
-ne | 不等于 |
-gt | 大于 |
-ge | 大于 |
-lt | 小于 |
-le | 小于等于 |
例:
num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo "两个数相等!"
else
echo "两个数不相等!"
fi
字符串测试
参数 | 说明 |
---|---|
= | 等于 |
!= | 不相等 |
-z 字符串 | 字符串的长度为零 |
-n 字符串 | 字符串的长度不为零 |
例:
str1="lua"
str2="shell"
if test $str1 = $str2
then
echo '两个字符串相等!'
else
echo '两个字符串不相等!'
fi
结果:两个字符串不相等!
流程控制
if
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
#ps -ef | grep -c "ssh"为查找ssh程序进程数量
#结果为:true
例:
a=10
b=20
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi
#输出结果:两个数字相等!
while 语句
例:
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
结果:
1
2
3
4
5
until 循环
例:
a=0
until [ ! $a -lt 5 ]
do
echo $a
a=`expr $a + 1`
done
结果
0
1
2
3
4
case
即case … esac
例:
echo '你输入的数字为:'
read aNum
case $aNum in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
*) echo '你没有输入 1 到 3 之间的数字'
;;
esac
结果:
1
你选择了 1
跳出循环
break命令
break命令允许本层跳出所有循环(终止执行后面的一层for或者while所有循环)
continue
continue命令不会跳出所有循环,仅仅跳出当前循环。
函数
例子:
Fun(){
echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
Fun
echo "-----函数执行完毕-----"
结果:
-----函数开始执行-----
这是我的第一个 shell 函数!
-----函数执行完毕----
例2:
fun2(){
read aNum
return $(($aNum*$aNum))
}
fun2
结果
2
4
函数参数
例:
fun3(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第三个参数为 $3 !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
fun3 1 37 8 73
结果
第一个参数为 1 !
第二个参数为 2 !
第三个参数为 3 !
参数总数有 4 个!
作为一个字符串输出所有参数 1 37 8 73 !
参数处理 | 说明 |
---|---|
$# | 传递到脚本或函数的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
输入/输出重定向
多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端。
重定向命令列表
命令 | 说明 |
---|---|
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 之间的内容作为输入。 |
执行下面的 who 命令,它将命令的完整的输出重定向在用户文件中(users):
$ who > users
执行后,并没有在终端输出信息,这是因为输出已被从默认的标准输出设备(终端)重定向到指定的文件。
输出重定向会覆盖文件内容,请看下面的例子:
$ echo "shell" > users
$ cat users
shell
一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。
如果希望 stderr 重定向到 file,可以这样写:
$ command 2 > file
如果希望 stderr 追加到 file 文件末尾,可以这样写:
$ command 2 >> file
表示标准错误文件(stderr)。
如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写:
$ command > file 2>&1
或者
$ command >> file 2>&1
Here Document
用来将输入重定向到一个交互式 Shell 脚本或程序
例
在命令行中通过 wc -l 命令计算 Here Document 的行数:
$ wc -l << EOF
21312
21321
12312
EOF
3 # 输出结果为 3 行
例2
将 Here Document 用在脚本中
21312
21321
12312
EOF
结果:
21312
21321
12312
end~~~
感觉有点囫囵吞枣,太快了感觉就只是过了一遍,留下的东西不多。所以获取知识最大的代价还是时间啊。