系统服务及shell编程 $?表示函数的返回值
防火墙(ufw)
-
说明:简单版本的防火墙,底层依赖于iptables。
-
安装:
sudo apt-get install ufw
-
查看状态:
sudo ufw status
-
开启/关闭:
sudo ufw enable|disable
-
默认允许/禁止:
sudo ufw default allow|deny
-
允许/禁止:
sudo ufw allow|deny 服务|port
,如:sudo ufw deny ssh
-
移除规则:
sudo ufw delete deny ssh
管道及xargs
-
|:管道,将前面命令的输出作为后面命令的输入参数,如:
ls /bin | grep '^m'
-
xargs:有些命令无法接收管道参数,可以通过xargs解决,如:
find -name 1.sh | xargs rm -rf
重定向
-
三个数据流:标准输入(stdin)、标准输出(stdout)、标准错误(stderr)
-
在linux,启动任意的进程,系统会自动创建上面三个数据流,其实就是三个文件
-
三个文件的描述符分别是:0、1、2,都指向了终端
-
重定向就是改变原来的表现位置。
-
输出重定向:
ls > 1.txt # 将ls的输出结果保存到1.txt文件中,会新建文件1.txt,若文件存在则会清空
ls >> 1.txt # 将ls的输出结果追加到1.txt文件中,文件不存在也会创建
错误重定向:
ls /xxx 2> 2.txt # 将错误信息保存到2.txt
同时重定向输出和错误:
ls /xxx /home &> 3.txt # 同时将错误和输出保存到3.txt文件中
shell简介
-
什么是shell编程?
-
将终端下编写的命令等保存到文件中,就称为shell编程。
-
-
shell类型?
-
ash、bash、csh、ksh
-
查看系统shell解析器:
echo $SHELL
-
当前系统可以shell解析器:
/etc/shells
文件
-
-
shell脚本的执行
-
指定shell解析器执行指定脚本:
bash hello.sh
,不需要添加可执行权限 -
将shell脚本作为可执行文件执行,必须添加可执行权限
-
添加可执行权限:
sudo chmod +x world.sh
-
在脚本开头指定shell解析器:
#! /bin/bash
,其他位置的#表示注释 -
执行脚本:
-
在当前目录:
./world.sh
-
不在当前目录:
/home/jerry/shell/world.sh
-
-
-
shell变量
-
变量定义:
name='dahua'
,'='两边不能有空格 -
打印变量:
echo $name 或 echo ${name}
-
销毁变量:
unset name
,之后就不能再使用 -
声明常量:
readonly name='dahua'
-
使用说明:'='两边不能有空格,只读变量不能修改
变量分类
-
本地变量:只适用于当前shell的变量
-
环境变量:适用于整个系统,通常都是纯大写的
-
查看系统环境变量:
env
-
查看指定环境变量:
echo $PATH
-
若想在任意位置都可执行指定程序,可以将程序所在的路径添加到环境变量PATH。
-
修改:
-
单次:
export PATH=$PATH:/home/jerry/shell
-
永久:
-
系统:
/etc/profile
-
用户:
~/.profile、~/.bashrc、~/.bash_profile
-
把导出的语句添加到文件末尾即可
-
使文件生效:重启终端 或
source ~/.bashrc
-
-
-
-
位置变量:
-
$0:执行脚本的名字
-
$1 ~ $9
:传递给脚本的参数
-
-
特殊变量:
-
$#:传递给脚本的参数个数
-
$*:传递给脚本的所有参数
-
$?:上次命令的执行情况,0表示正确,其他表示错误
-
字符串类型
-
单引号:其中的字符都会原样输出,不会被解析
-
双引号:可以放除了$、`、、"以外任意字符,其中的变量等会被解析
-
反引号:将其中的内容作为命令执行,如:
echo `date`
-
'':转义特定的字符,如:$、*、、?、|、`、^、&
-
字符串长度:${#name}
-
字符串提取:${name:2:3},从变量name中下表为2的地方提取3个字符
数组类型
-
定义:
a=(1 2 3)
-
成员访问:
echo ${a[2]}
-
个数统计:
echo ${#a[@]}
-
所有元素:
echo ${a[*]}
seq
-
说明:生成指定范围的连续整数
-
示例:
seq 10
,生成1~10的连续整数,seq 2 10
,生成2~10的连续整数
expr
-
说明:运算一个表达式
-
示例:
expr 2 + 3 结果为5
echo `expr 3 + 5` 结果会打印8
expr 3 * 5 结果为15,*需要转义
各种运算
-
test命令:成功为真,失败为假。
-
数值比较运算
-
-lt:小于
-
-le:小于等于
-
-gt:大于
-
-ge:大于等于
-
-eq:等于
-
-ne:不等于
-
-
字符串测试
-
=:相等
-
!=:不相等
-
-z:字符串的长度是否为0
-
-n:字符串的长度是否不为0
-
-
文件判断
-
-f:普通文件
-
-d:目录文件
-
-c:字符设备文件
-
-b:块设备文件
-
-w:是否可写
-
-x:是否可执行
-
-s:文件存在,并且至少有一个字符
-
-
逻辑运算
-
-a:逻辑与(and),也可以使用&&来代替
-
-o:逻辑或(or),也可以使用||来代替
-
!:逻辑非
-
示例:
-
分支结构
-
if-elif-else:
-
case:
循环结构
-
for-in 及 for
-
while
-
until:条件成立,循环停止
-
break、continue自行学习
函数使用
-
demo(){
echo 'for func'
}
demo
arg(){ echo }
arg abc def
echo $?
•