shell变量
cd /opt //在此目录下写脚本 opt垃圾目录
shell只能执行非交互式命令
编写第一个shell脚本
#!/bin/bash
#这是一个测试脚本
echo ok
echo hello world在root用户下增加执行权限
chmod +x test.sh
bash test.sh 或 sh test.sh
在shell脚本下载ftp并设置自启动
#!/bin/bash
#安装ftp并设置自启动
dnf install -y vsftpd &> /dev/null (黑洞 将命令结果丢进黑洞) &> 重定向所有输出 >覆盖 >>追加
变量名字数字、字母、下划线 不能以数字开头,区分大小写,等号两边不能有空格
a=10
echo ${a}RMB #a是变量 RMB是常量 调用变量时为了防止混淆,通常给变量加上{}
删除变量
unset a 环境变量
echo $USER #当前登录用户
echo $PATH #系统环境变量
echo $UID #当前系统用户UID
echo $SHELL
echo $PWD
echo $PS1 一级提示符 修改前边输入头命令
echo $PS2 二级提示符 多行输入命令 如ls \ 换到下一行继续输入未知变量
#!/bin/bash
echo $1 #打印输入的第一个变量
echo $2 #打印输入的第二个变量
echo $3 #打印输入的第三个变量
echo $0 #打印输入脚本名称
echo $* #打印全部内容
echo $# #打印个数
echo $$ #打印程序执行进程号,目的是当某个程序不想要了,通过kill -9 杀死进程
echo $? #打印上一条任务是否执行成功 0是成功 其他数字是失败
练习
#!/bin/bash
useradd tom #创建用户
echo 123456 | sudo passwd --stdin tom #交互式设置用户密码
echo ---------------------------------------
useradd $1
echo $2 | sudo passwd --stdin tom 变量扩展(引号)
# 引号
a=" 10"
echo $a #结果10
echo "$a" #结果 10 #双引号 保留变量格式
echo " $a" #结果 10
echo '$a' #结果$a #单引号 屏蔽特殊符号的作用read
read -p -t 10 "请输入用户名:" u
read -p -t 10 "请输入用户密码:" n
useradd $u
echo $n | sudo passwd --stdin tom stty -echo 作用:输入密码时进行隐藏
临时变量
#set输出所有全局变量和局部变量(如:shell脚本文件中定义的变量)
#env只显示全局变量
#定义临时用户环境变量
TABA=100
#定义临时全局变量环境
export TABA=100运算(符号两边要加空格)
expr 1 + 1 加
expr 1 - 1 减
expr 2 \* 2 乘
expr 2 / 2 初
expr 4 % 3 取余
echo ---------------------------------
a=$[2+3]
echo $a # 结果5
echo $[2+3] # 结果5
a=10
b=20
echo $[a+b] # 结果30
echo $[$a+$b] #结果30
echo ------------------------------
let a=1+1
echo $a #结果为2
count=1
let count++ 变量count+1
let count-- 变量count-1
let count+=10 变量count+=10
let count-=10 变量count-=10
let count*=2 变量count*2
let count/=2 变量count/2
let count%=3 变量count%3
echo $countbc
1.1+1 #结果2.2
#退出命令 :quit
#在命令中使用
echo 1.1+1 | bc
echo 10/3 | bctest表达式 [ a == b ] 空格不能少
#方法1
#test 表达式
test abc == abc
echo $?
test abc == qwe
echo $?
#方法2
#表达式
[ abc == abc ]
echo $?
[ abcd == abc ]
echo $?
echo ----------------------------------------
a=qwe
b=wdd
[ $a == $b ]
echo $?
[ $a != $b ]
echo $?
echo -------------------------------------
#如果少空格
[ a==b ]
echo $? #结果为0
echo -------------------------------------------
a=abc
[ $a == $c ] #执行报错,因为c没有定义
[ "$a" == "$c" ] #不会报错
echo $? #结果为非0
echo ---------------------------------------------
# -z判断是否为空 (必须字母在前,变量在后)
[ -z "$c" ]
echo $? #结果为0
[ ! -z "$c"]
echo $? #结果为非0
# -n判断是否为非空
[ -n "$c" ]
echo $? #结果为非0逻辑组合
&&与 前边语句执行成功,执行后边语句
|| 或 前边语句执行失败,执行后边语句
[ root == $USER ] || exit
read -p -t 10 "请输入用户名:" u
useradd $u
stty -echo #输入密码时隐藏
read -p -t 10 "请输入用户密码:" n
echo $n | sudo passwd --stdin tom
stty echo
echo --------------------------
touch a b c
ls a && ls b && ls c #结果a,b,c ls a 执行成功 执行ls b , ls a $$ ls b 执行成功 执行ls c
ls a || ls b || ls c #结果a ls a 执行成功 不需要执行 ls b , ls a || ls b 执行成功 不需要执行 ls c
ls a || ls b && ls c #结果a,c ls a 执行成功 不需要执行 ls b , ls a || ls b 执行成功 执行 ls c
ls a && ls b || ls c #结果a,b ls a 执行成功 执行ls b , ls a && ls b 执行成功 不需要执行ls c
echo ---------------------------------------------
[ root != $USER ] && echo "非管理员用户" && exit
read -p -t 10 "请输入用户名:" n
useradd $n
stty -echo
read -p -t 10 "请输入用户密码:" u
echo $u | sudo passwd --stdin tom
stty echo 数字比较
-lt 小于 -le 小于等于
-gt 大于 -ge 大于等于
-eq 等于 -ne 不等于每两分钟检查一次服务器用户有没有增加,如果有发送邮件
1.安装 mail postfil
sudo apt install mailutils postfil
2.mail test(邮件主题) -s root(发送用户)
3.检查服务器用户数量 cat /etc/passwd | wc -l #查看行数
echo -----------------------------
echo "非交互式发送" | mail test -s root
vim /etc/test.sh
#!/bin/bash
a= $(cat /etc/passwd | wc -l)
[ $a -gt 55] && echo "服务器有人入侵了" | mail -s test root
给脚本赋予执行权限
chmod +x test.sh
vim /etc/cron
*/2 * * * * /opt/test.sh文件判断
-e #判断文件存不存在,不关心文件类型
-f #判断文件是否存在,只能是普通文件
-d #判断文件是否存在,必须是目录
-r #判断当前用户对文件是否有读权限(对root无效) chmod 000 abc.txt root用户依旧能读和写
-w #判断当前用户对文件是否有写权限(对root无效)
-x #判断当前用户对文件是否有执行权限
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员fancy
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果