加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Shell

发布时间:2020-12-15 22:21:34 所属栏目:安全 来源:网络整理
导读:Shell脚本:一个可运行的文件,可实现某种功能。 书写规范: #! 环境声明(以下的代码由哪个程序翻译) # 注释文本 可执行代码 变量的种类 1.环境变量:变量名一般大写,由系统定义完成,用户直接使用。 USER=永远储存当前系统登陆的用户名。 echo $USER #如果切

Shell脚本:一个可运行的文件,可实现某种功能。

书写规范:
#! 环境声明(以下的代码由哪个程序翻译)
# 注释文本
可执行代码

变量的种类
1.环境变量:变量名一般大写,由系统定义完成,用户直接使用。

USER=永远储存当前系统登陆的用户名。
echo $USER #如果切换到其他用户,也会变成相应用户。

PATH:存储命令程序的路径
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

cp /root/hello.sh /usr/bin #必须放入PATH的路径才能生效
hello.sh #执行成功

2.位置变量:由系统定义完成,用户直接使用,非交互式。
在执行脚本时,提供的命令行参数
表示为 $n,n为序号。如$1、$2、$3 、$4.. .. ${10}、${11}..

利用位置变量实现
vim /root/user.sh
#!/bin/bash
useradd $1 &> /dev/null
echo $1创建成功
echo 123 | passwd --stdin $1 &> /dev/null
echo $1密码设置成功

/root/user.sh lisi

vim /root/1.sh
#!/bin/bash
cat -n $1 | head -$2

/root/1.sh /etc/passwd 3

3.预定义变量:由系统定义完成,用户直接使用。
用来保存脚本程序的执行信息
不能直接为这些变量赋值

$# 用户输入位置变量的个数
$* 所有位置变量的值
$? 程序退出后的状态值,0表示正常,其他值异常

vim /root/2.sh
#!/bin/bash
echo $1
echo $2
echo $3
echo $# #输出一共有多少个参数(求和)
echo $* #输出所有位置变量的值

/root/2.sh haha xixi hehe lele

4.自定义变量:用户自主设置、修改及使用。
单引号 ‘ ‘ 来取消所有特殊字符的含义。

变量:相当于容器,以不变的名称,存储可变化的值。
变量名=变量值 (为变量赋值)
作用:增加脚本的灵活度,适用多变的环境。

设置变量名要注意:
1,只能由(字母/数字/下划线)组成,区分(大小写)
2,不能以(数字)开头,不要使用(关键字,特殊字符)
3,若指定的变量名已存在,相当于(为此变量重新赋值)
4,等号两边(不要有空格)

引用变量值:$变量名
查看变量值:echo $变量名、 echo ${变量名}

a=rhel
echo $a
echo $a7
echo ${a}7

read:
1.产生交互
2.记录用户在键盘上的输入
3.将记录的信息赋值给变量

-p:让屏幕提示信息‘‘

vim /root/user.sh
#!/bin/bash
read -p ‘请输入您要创建的用户:‘ abc
useradd $abc &> /dev/null
echo $abc创建成功
echo 123 | passwd --stdin $abc &> /dev/null
echo $abc密码设置成功


利用Shell运行一个文件,可执行命令,输出:hello world
vim /root/hello.sh
#!/bin/bash
echo hello world
chmod +x /root/hello.sh #加上执行权限
ls -l /root/hello.sh
/root/hello.sh

--------------------------------------------------------------------------------------------------------------------
常用的测试选项,检查文档状态:
-e:文档存在为真
-d:文档存在,且为目录才为真
-f:文档存在,且为文件才为真
-r:文档存在,且有读取权限才为真
-w:文档存在,且有写入权限才为真
-x:文档存在,且有执行权限才为真

比较整数大小
-eq:等于
-ne:不等于
-gt:大于
-ge:大于等于
-lt:小于
-le:小于等于

[ 1 -gt 2 ]
echo $? # $? 上条命令的输出结果,为0是正确,其它数字是错误

字符串比对
==:两个字符串相等为真
!=:两个字符串不相等为真

[ student != root ]
[ $USER == root ]
echo $?


if双分支处理
if [条件测试];then
命令序列xx
else
命令序列yy
fi

利用read实现交互 ??????
用户输入一个用户名,脚本判断用户所输入的用户是否存在?
如果存在,输出用户存在。
如果不存在,输出用户不存在。

vim /root/if01.sh
#!/bin/bash
read -p ‘请输入您要测试的用户名:‘ user
id $user &> /dev/null
if [ $? -eq 0 ];then #判断上一条命令是否成功
echo $user用户已存在
else
echo $user用户不存在
fi


利用位置变量实现命令行传递参数。 ?????ping 00000000居然可以通信
参数为IP地址,脚本判断用户所输入IP地址,是否本机可以ping通?
如果可以ping,输出 可以通信。
如果不可以ping,输出 不可以通信。

vim /root/if02.sh
#!/bin/bash
ping -c 2 $1 &> /dev/null
if [ $? -eq 0 ];then
echo $1 本机可以通信
else
echo $1 本机不可以通信
fi

/root/if02.sh 192.168.1.1

优化:
vim /root/if02.sh
#!/bin/bash
if [ $# -eq 0 ];then #判断用户是否输入参数
echo 格式错误,请在脚本运行时添加参数
echo 参数为IP地址
else
ping -c 2 $1 &> /dev/null
if [ $? -eq 0 ];then
echo $1 本机可以通信
else
echo $1 本机不可以通信
fi
fi


for循环结构:让计算机重复执行一个操作
for 变量名 in 值列表
do
命令序列
done


for a in zhangsan lisi wangwu dc
do
useradd $a
echo 123 | passwd --stdin $a
done

造数: {起始数值..结束数值}
cat /root/for01.sh
#!/bin/bash
for a in {1..20}
do
useradd stu$a &> /dev/null
echo stu$a创建成功
done
/root/for01.sh


$( ) 或 反撇号 ` `
将命令的输出,作为另一个命令的参数,参与下一个命令的运行
date +%F
2018-09-12
cd /mnt
mkdir nsd-`date +%F`
mkdir $(hostname)-$(date +%F)
ls

扩展案例:
vim /root/user.txt
yuanxiao
qingming
duanwu
wuyi
liuyi
wusi
......
请利用for循环:
该文件/root/user.txt内容,每一行为一个用户的名称,创建/root/user.txt文件中所有用户
#!/bin/bash
a=`cat /root/user.txt`
for b in $a
do
useradd $b &> /dev/null
echo $b用户创建成功!
done


if多分支处理
if [条件测试1];then
命令序列xx
elif [条件测试2];then
命令序列yy
elif [条件测试3];then
命令序列cc
......
else
命令序列zz
fi


利用read交互,让用户输入考试成绩
进行如下判断
如果成绩大于90 则 输出 优秀
如果成绩大于80 则 输出 良好
如果成绩大于70 则 输出 一般
如果成绩大于60 则 输出 合格
以上条件均不满足 , 则 输出 再牛的肖邦,也弹不出哥的悲伤

vim /root/if03.sh #!/bin/bash read -p ‘请输入您的成绩:‘ num if [ $num -ge 90 ];then echo 优秀 elif [ $num -ge 80 ];then echo 良好 elif [ $num -ge 70 ];then echo 一般 elif [ $num -ge 60 ];then echo 合格 else echo 再牛的肖邦,也弹不出哥的悲伤 fi

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读