d r-x r-x r-x . 20 root root 4096 Oct 21 13:10 ..
rwx = 4+2+1 = 7 # 文件权限 4 2 1 读-写-执行
r 读取:4 w写入:2 x执行:1 - 没有权限(如:r-x 中的 -)
d 目录 - 文件 I 连接文档 b储存接口, c串行端口设备,
1-3位 所有者权限 owner
4-6位 所有者的同组用户权限 group
7-9位 其他用户拥有该文件的权限 others
----------------- 执行脚本的方法 --------------
chomd a+x xxx.sh #给脚本赋权限
chomd 777 xxx.sh
source xxx.sh #执行脚本的方法
./xxx.sh
/bin/sh xxx.sh
/bin/php xxx.php
clear # 清空命令界面
cat /dev/null > /root/1.sh # 清空文件字符串(文件内的字符)
------------- 编辑shell 脚本 ------------
cat >xxx.sh<< END
#!/bin/bash
a="小绿叶技术博客" # 定义变量a 为一个字符串
echo =$a # 响应这个变量
END # 结束写入标记,与开头的END一样
liunx 三剑客:linux 三剑客 grep awk sed
shell 增删改查-文件操作: https://www.eisc.cn/index.php?c=read&id=165&page=1&cache=refresh
awk编程:https://www.eisc.cn/index.php?c=read&id=163&page=1&cache=refresh
-------- 接收用户输入信息,在命令中传字符串到文件 --------------
#!/bin/bash
rm -rf /www/wwwroot/www/.well-known/pki-validation/fileauth.txt
touch /www/wwwroot/www/.well-known/pki-validation/fileauth.txt
# 操作文件为新空文件
for i in "$*"; do
# 符号* 换成@ 将识别命令界面输入的空格为换行
# i in "$*" 定义参数i 是变量 "$*" ;变量i 是 “$*”用户 输入得来的
echo "$i" >> /www/wwwroot/www/.well-known/pki-validation/fileauth.txt
# 将命令界面的参数传入文件
done #结束
cat /www/wwwroot/www/.well-known/pki-validation/fileauth.txt
# 查看效果
chomd a+x ssl.sh # 可执行权限
./ssl.sh 12345678 # 执行脚本并传入参数为12345678
----------- 指定查找元素 ----------
#!/bin/bash
x=(A B "CDEF" D)
echo "第一个元素为: ${x[0]}" # ${x[0]} 是一个整体变量
echo "第二个元素为: ${x[1]}" # x 变量 [1] 是 B,机器从0开始计数
echo "第三个元素为: ${x[2]}" # ${x[2]} 是一个整体: CDEF
echo "第四个元素为: ${x[3]}
#!/bin/bash
x[0]=a # 定义x的第一个变量值为 a
x[1]=b
x[2]=cvb
echo "数组的元素为: ${x[@]}" # @ 是换行显示所以值
echo "数组个数为:${#x[*]}" # * 不换行显示所有字符
#!/bin/bash
a=10
b=20
val=`expr $a + $b` # 将 + 符号换成: 减- 乘 \* 除 / 取余 %
echo "a +b = $val" # 响应一个字符串, 和变量的值 $val
if [ $a == $b ] # if 如果,then 然后, echo 响应,fi 结束字句
then # [ $a == $b ] 用绝对等于符号判断两个字符串
echo "a 等于 b "
fi
--------- 逻辑运算符号符合条件就返回true ------------
#相等 -eq 不相等 -ne 大于 -gt 大等于 -ge 小于 -lt 小等于 -le
# 非运算 ! 或运算 -o 与运算 -a
[ $a != $b ] # 变量:a 不等于 b, 非运算
[ $a -lt 60 -a $b -gt 15] # 变量:a <60 且 b>15 与运算
[ $a -lt 100 -o $b -gt 100 ] # 变量:a<100 或 b> 100 或运算
&& # 相当于与运算,满足所有条件;也用于前面成功完成才执行后面
|| # 相当于或运算,满足一个条件就可以;前面无论成功失败就执行后面
= 字符串是否相等; != 判断是否不相等; -z 字符串长度为0;
-n 字符串长度不相等; $ 字符串为空
#--- 打印字符串长度 ----#
a="123456789" ; echo ${a: 3: 4-2} # echo ${ } 是计算函数,所以:4-2 等于2 如果为负数是倒数,需要添加空格指定
# 截取第3个字符后面的2个字符(不包含第3)
echo ${#a} # 打印字符串长度
用来判断文件的参数:
-r 可读 -b块设备文件 -c 字符设备 -d 目录 -f 普通文件 -g SGID位 -k站着位stick bit
-p 管道 -u SUID -r 可读 -w 可写 -x 执行 -s 文件为空 -e 文件存在
touch 888
vi 1.sh
#!/bin/bash
file="888" #定义变量
if [ -r $file ] # -r 检测文件是否可读
then
a0="888文件可读"
else
a0="888不可读"
fi
if [ -b $file ]
then
a1="是块设备文件"
else
a1="不是块设备文件"
fi
echo $a0+$a1
---------------------------- printf 格式控制字符串 -----------------------
格式替代符为:%s %c %d %f
vi 2.sh
#!/bin/bash
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
# %-10s 宽度间隔为10个字符,间隔分别为:10,8,4;本句有三列,按照此规则进行间距
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
# %-4.2f 格式化为小数,其中2表示保留2位小数
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
---------------------------- printf 的转译字符 ----------------
\a 警告字符 \b 后退 \c 抑制结尾换行符 \f 换页 \n 换行 \r 回车 \t 水平制表符
\v 垂直制表符 \\ 字面反斜杠字符 \ddd 1~3位数八进制字符 \0 dddd 1~3位八进制字符
printf "%s %s %s\n" a b c d e f g h i j f
# 有三个符号 %s 是分为三列,其它字符用 \n 换行显示
printf "%s and %d \n"
# 若没有参数 a b c 等;符号%s返回为空;%d返回0,有参数返回它本身
------------------------ test ------------------------
字符串参数:
-eq 等于为真 -ne 不等于为真 -gt 大于为真 -ge 大等于为真
-lt 小于为真 -le 小等于为真
= 等于 != 不等于 -z 字符串长度为0 -n 字符长度不为0
文件参数:
-e 文件存在 -r 文件可读 -w 文件可写 -x 可执行 -s 文件存在字符
-d 存在目录 -f 存在文件 -c 文件存在特殊字符 -b 特殊块文件
实例:
mkdir -p 1/2/3 # -p 当父目录不存在时先创建
vi 1.sh
#!/bin/bash
if test -e 1.txt -o -e 2.txt # -o 或运算 -e 判断文件存在
then
echo '至少有一个文件存在!'
else
echo '两个文件都不存在'
fi
------ if else-if else ----
#!/bin/bash
a=10; b=20 # 定义参数,用 ; 和空格隔开,或者换行
if [ $a == $b ] # 判断变量 == 绝对等于。if 如果,fi结束
then # then 然后
echo "a 等于 b" # echo 响应
elif [ $a -gt $b ] # elif 否则如果
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi
x=$[2*3] # 定义变量的值
y=$[1+5]
if test $x -eq $y # if test 如果文本 -eq 相等
then
echo '两个数字相等!'
else
echo '两个数字不相等!'
fi
-------- for循环 -------
for loop in 1 2 3 4 5 # 换行显示字符串
do
echo "The value is: $loop"
done
----------
for str in '1 2 3 4 5' # 不换行显示字符串
do
echo $str
done
-----------
#!/bin/bash
for((i=1;i<=5;i++));do
echo "这是第 $i 次调用";
done;
---------- whlie ----------
#!/bin/bash
x=1 # 定义变量 x 初始值
while(( $x<=5 )) # while 与此同时,变量x 要小等于5
do # do 开始 ,done结束 循环
echo $x # 响应 x 变量的值
let "x++" # let 让 变量 x 自动增加值
done # 结束
------
while read x # 接收用户输入信息,变量为 x
do
echo "是的!$x 是一个好网站"
done
--------------- until 循环 --------------
until [ənˈtɪl] 直到...为止:为 true 才停止
a=0
until [ ! $a -le 5 ] # until 与 while 一样要写在开头,le 小等于 5
do
echo $a
a=`expr $a + 1` # a的值等于 expr :表达式;公式:变量自己加1 (自增1)
done
================= 多选择判断语句 ==============
------------ case ---------
echo '你将要输入的数字为:'
read x # read [riːd] 读取变量的值
case $x in # case [keɪs] 事例; x 在下面数字中匹配到就响应字符串
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;; # ;; 如果没有匹配到数值自动结束
esac
---------------- break 终止后面的所有循环 -----------------
#!/bin/bash
while :
do
echo -n "输入 1 到 5 之间的数字:"
read x # 读取 x 变量
case $x in # case 事例 变量x在下面中匹配正确后输出字符串和变量x的值
1|2|3|4|5) echo "你输入的数字为 $x!"
;; # 到这里结束;因为没有匹配到数值
*) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
break # 跳出循环
;;
esac
done
------------------ continue -------------
continue [kənˈtɪnjuː] 持续
# 仅仅跳出当前循环,不会跳出整个循环
#!/bin/bash
while :
do
echo -n "输入 1 到 5 之间的数字: "
read x # read [riːd] 读取 变量 x 的值
case $x in # case [keɪs] 事例,定义这个事件:变量x的值在下面去匹配
1|2|3|4|5) echo "你输入的数字为 $x!"
;;
# 匹配成功则 响应一个字符串和变量 $x,
# 否则就返回后面的字符串
*) echo "你输入的数字不是 1 到 5 之间的!"
continue # 结束子循环,继续停留在这里
echo "游戏结束" # 这是测试的,看看会不会被整体结束
;;
esac
done
符号:
$# 传参个数 $* 传参内容 $$ 当前进程ID $! 后台最后ID $@ 换行显示传参内容
$- 显示选项与set相同 $? 退出状态0正常,其他有错误
#!/bin/bash
function xxx(){ # function [ˈfʌŋkʃn] 函数,功能
# 定义一个函数为 xxx
echo "这是我的第一个 shell 函数!"
return `expr 1 + 1`
# 这是函数的内容
# return [rɪˈtɜːn] 返回一个值
# expr 简单计算标签函数
}
xxx # 启用xxx 函数
# 有两个,1字符串,2简单计算
echo $?+$- # 响应: $? 退出状态,$- 显示选项
echo $-
# 可以存放多个函数,如 function a; function b 等等
--------------------------- 重点:函数命令 ------------------------
if echo "Hello World !" | grep -e Hello
# if 判断响应的字符串里面,grep 匹配 -e 存在: hello
then # then 然后
echo true # 响应为 true
else # else 其他
echo false
fi # 结束
------------------
return 返回值 0为真 turn,大于0为假false;
function a(){ # 定义函数,他的名字为a
return 0 # 手动定义它的返回值为真 0
}
function b(){ # 函数 b
return 3 # 大于了0 为假false
}
if a # 判断函数a 的返回值 是否为真 0
then # 然后
echo true # 响应
else
echo false
fi
if b # 判断 函数b 是否为真 0
then # 然后
echo ture #相应 值
else
echo false
fi
------------------------ 输入输出重定向 --------------------------
#!/bin/bash
for a in "小绿叶技术博客" "https://www.eisc.cn"
# 定义变量 a 为字符串
do
echo $a>>1.txt #将输入结果以追加的方式重定向到文件
# 将变量 a 重定向到文件
done
cat 1.txt #查看效果
-----------------
ls -l >1.txt # 将命令的结果重定向到文件
#!/bin/bash
echo "############### 文件备份 ################"
function touch(){
if test -e /etc/sysconfig/iptables111
# -e 判断文件存在
then
echo '备份文件存在不会创建'
else
cp -rf /etc/sysconfig/iptables /etc/sysconfig/iptables111
echo '文件不存在,已经为你创建备份文件,备份文件内容为:'
cat /etc/sysconfig/iptables111
fi
}
touch
echo "############# 指定字符位置行号 ###############"
function sed(){
a=$(cat -n /etc/sysconfig/iptables |grep 22 |awk '{print $1}')
# 给变量赋值
# 正则表达式:显示行号查看文件,grep 22匹配字符22的
# wak 按字段处理,打印第一例
if [ ! $a ]; # 判断变量为空
then
echo "信息没有找打行数"+$a+"不会对文件进行修改"
else
echo "行数已经找到,第"+$a+"行"+"正在对文件进行修改"
fi
}
sed
#!/bin/bash
#### 先使用函数备份文件 ####
function touch(){ # 定义一个函数,名字为 touch
if test -e /etc/sysconfig/iptables111
# test -e 判断文件存在
then # 然后
echo '备份文件存已经存在,不会被创建/etc/sysconfig/iptables111'
# 响应一个字符串
else # 其他情况
cp -rf /etc/sysconfig/iptables /etc/sysconfig/iptables111
echo '已经为你创建备份文件,备份文件内容为/etc/sysconfig/iptables111:'
cat /etc/sysconfig/iptables111
# 做出处理,自定义操作
fi # if 如果(开始),fi 结束
}
touch # 函数名字放出来,才能被识别执行
echo "感谢使用本程序,开发商:小绿叶技术博客eisc.cn"
#### 然后再操作文件 ####
#!/bin/bash
echo "初始化配置文件内容" # echo 打印字符串到命令窗口界面
cat /dev/null > /etc/sysconfig/iptables
# 使用cat 查看将配置文件清空 null
cat /etc/sysconfig/iptables111 > /etc/sysconfig/iptables
# 使用cat 从备份文件 iptables111 里面还原字符串
sed -i '/22/a\-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT' /etc/sysconfig/iptables
# sed -i 写入文件
# 先匹配22端口的行
# a\ 在它的后一行插入字符串
# 修改的是iptables 文件
cat /etc/sysconfig/iptables
echo "使用sed 方法已修改配置文件:"
service iptables restart # 重启防火墙
service httpd restart # 重启 httpd 服务
echo "该脚本已实现可重复正常执行达到效果
防火墙已成功添加端口80,现在访问 apache
开发商:小绿叶技术博客 https://www.eisc.cn/index.php?c=read&id=10&page=1&cache=refresh
"
Powered by ddoss.cn 12.0
©2015 - 2025 ddoss
渝公网安备50011302222260号
渝ICP备2024035333号
【实验平台安全承诺书】
小绿叶技术社区,优化网络中,点击查看配置信息
主机监控系统: 安全防火墙已开启检查cc攻击-下载文件完成后等待10s 恢复访问,检查连接数低于峰值恢复访问
您的IP:216.73.216.110,2025-12-01 16:08:04,Processed in 0.01895 second(s).