系统服务及shell编程
防火墙(ufw)
1.说明:简单版本的防火墙,底层依赖于iptables。
2.安装:sudo apt-get install ufw
3.查看状态:sudo ufw status
4.开启/关闭:sudo ufw enable|disable
5.默认允许/禁止:sudo ufw default allow|deny
6.允许/禁止:sudo ufw allow|deny|服务|port,如:sudo ufw deny ssh
7.移除规则:sudo ufw delete deny ssh
管道及xargs
- |:管道:将前面命令的输出作为后面命令的输入参数,如:ls /bin |grep ‘^m’
- xargs:有些命令无法接收管道参数,可以通过xargs解决,如:find -name 1.sh | xargs rm -rf
重定向ba
1.三个数据流:标准输入(stdin)、标准输出(stdout)、标准错误(stderr)
2.在linux,启动任意的进程,系统会自动创建上面三个数据流,其实就是三个文件
3.三个文件的描述符分别是:0、1、2,都指向了终端
4.重定向就是改变原来的表现位置。
5.示例演示:
输出重定向:
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简介
1.什么是shell编程?
将终端下编写的命令等保存到文件中,就称为shell编程.
2.shell类型?
(1)ash、bash、csh、ksh
(2)查看系统shell解析器,echo $SHELL
(3)当前系统可以shell解析器:/etc/shells文件
3.shell脚本的执行
指定shell解析器执行指定脚本:bash hello.sh,不需要添加可执行权限
将shell脚本作为可执行文件执行,必须添加可执行权限
添加可执行权限:sudo chmod +x world.sh
在脚本开头指定shell解析器:#! /bin/bash,其他位置的#表示注释
执行脚本:
在当前目录: ./world
不在当前目录:/home/zzh/shell/world.sh
shell变量
1.变量定义:name=‘dahua’,’’=’\'两边不能有空格
2.打印变量:echo $name 或 echo ${name}
3.销毁变量:unset name,之后不能再使用
4.声明常量:readonly name=‘dahua’
5.使用说明:’=\'两边不能有空格,只读变量不能修改
变量分类
1.本地变量:只适用于当前shell的变量
2.环境变量:适用于整个系统,通常都是纯大写的
查看系统环境 变量:env
查看指定环境变量:echo $PATH
若想在任意位置都可执行指定程序,可以将程序的路径添加到环境变量PATH.
修改:
单次:export PATH=$PATH:/home/zzh/shell
永久:
系统:/etc/profile
用户:~/.profile 、~/.bashrc、~/.bash_profile
把导出的语句添加到文件末尾即可
使文件生效:重启终端或 source ~/.bashrc
3.位置变量
$0:执行脚本的名字
$1-$9:传递给脚本的参数
4.特殊变量
$#:传递给脚本的参数个数
$*:传递给脚本的所有参数
$?:上次命令的执行情况,0表示正确,其他表示错误.
字符串类型
单引号:其中的字符都会原样输出,不会被解析
双引号:可以放除了$、`、\\、\"以外任意字符,其中的变量等会被解析
反引号:将其中的内容作为命令执行,如:
echo `date`
\'\\\':转义特定的字符,如:$、*、\\、?、|、`、^、&
字符串长度:${#name}
字符串提取:$(name:2:3),从变量name中下标为2的地方提取三个字符
数组类型
1.定义数组:a=(1 2 3)
2.成员访问:echo ${a[2]}
3.个数统计:echo ${#a[@]}
4.所有元素:echo ${a[*]}
seq
1.说明:生成指定范围的连续整数
2.示例:seq 10,生成1~10的连续整数,seq 2 10,生成2~10的连续整数
expr
1.说明:运算一个表达式
2.示例:
expr 2 + 3 结果为s
echo `expr 3 + 5 ` 结果会打印8
expr 3 \\* 5 结果为15,*需要转义
各种运算
1.test命令:成功为真,失败为假.
#! /bin/bash
if test 1 -lt 2; then
echo \'ok\'
fi
if [ 1 -lt 2 ]; then
echo \'okok\'
fi
2.数值比较运算
-lt:小于
-le:小于等于
-gt:大于
-ge:大于等于
-eq:等于
-ne:不等于
3.字符串测试
=:相等
!=:不相等
-z:字符串的长度是否为0
-n:字符串的长度是否不为0
4.文件判断
-f:普通文件
-d:目录文件
-c:字符设备文件
-b:块设备文件
-w:是否可写
-x:是否可执行
-s:文件存在,并且至少有一个字符
5.逻辑运算
-a:逻辑与(and),也可以使用&&来代替
-o:逻辑或(or),也可以使用||来代替
!:逻辑非
示例:
#! /bin/bash
if [ 1 -lt 3 -a 2 -lt 3 ]; then
echo \'ok\'
fi
if [ 1 -lt 3 ] && [ 2 -lt 3 ]; then
echo \'ok\'
fi
if [ ! 1 -gt 3 ]; then
echo \'xxx\'
fi
分支结构
1.if-elif-else
#! /bin/bash
if [ 8 -lt 3 ]; then
echo \'8 < 3\'
elif [ 8 -lt 9 ]; then
echo \'8 < 9\'
else
echo \'xxx\'
fi
2.case:
#! /bin/bash
read -p \'please input any charactor:\' ch
case $ch in
[a-z])
echo \'alpha\'
;;
[0-9])
echo \'numberic\'
;;
*)
echo \'others\'
;;
esac
循环结构
1.for-in 及 for
#! /bin/bash
a=(1 2 3 4 5)
# for x in a b c
# for x in /etc/*
#for x in `seq 1 10`
for x in ${a[*]}
do
echo $x
done
for ((i=0;i<${#a[@]};i++))
do
echo ${a[$i]}
done
2.while
#! /bin/bash
i=1
sum=0
while [ $i -le 100 ]
do
#((sum+=$i))
#((i++))
#let sum+=$i
#let i++
sum=$[$sum+$i]
i=$[$i+1]
done
echo $sum
3.until: 条件成立,循环停止
#! /bin/bash
i=1
until [ $i -gt 10 ]
do
echo $i
((i++))
done
4.break 、continue自行学习
函数使用
demo(){
echo \'for func\'
}
demo
$?表示函数的返回值
echo $?
args(){
echo $1
echo $2
echo $*
echo $#
return 250
}
args abc def
echo $?
继续阅读与本文标签相同的文章
Java数据类型及转换
-
ROKU流媒体聚合平台终将变革电视机操作系统和流媒体的观看方式
2026-05-18栏目: 教程
-
权威报告:中国专利申请连续8年居首,占世界一半
2026-05-18栏目: 教程
-
新技术:AI可快速准确检测因糖尿病造成的视网膜病变
2026-05-18栏目: 教程
-
GPS轨迹分析工具,附使用指导
2026-05-18栏目: 教程
-
字节跳动要做一款24小时在家陪读的AI教练,原锤子团队参与研发
2026-05-18栏目: 教程
