shell[解释器]
bash【bash解释器】常用的解释器
1、可以快捷键,Tab键补全
2、命令历史
3、别名
4、标准输入输出
5、重定向
6、管道操作
cmd (vim编辑器)
which + 目的 (查找该文件的所在路径)
ctrl + a : 全选
ctrl + e :
ctrl + w :
history -l (查看历史命令)
history -c (清除历史命令)
alias:
[root@server0 ~]# alias 关机="echo 你好"
[root@server0 ~]# 关机
你好
标准、错误 :输入输出 (重定向)
默认输出屏幕 > 文件
导出: > >>
[root@server0 ~]# ls /etc/hosts nofile >log1 2>log2
正确的输出在log1 错误的输出在log2
倒入:<
[root@server0 ~]# vim test.sh
#!/bin/bash
for i in {1..10}
do
useradd user$i 2>>log1
echo "123" | passwd --stdin user$i
done
[root@server0 ~]# chmod +x test.sh (给权限)
[root@server0 ~]# ./test.sh (运行)
[root@server0 ~]# cat log1 (看)
写邮件:
第一种:
#: echo "hello" | mail -s hello root
第二种:
#:vim mail.txt(写)
#:mail -s hello root < mail.txt (发)
#:mail (查)
===================================================
管道 『| 』
wc -l 统计
脚本:
1、新建文件(.sh)文件格式
2、写代码
#!/bin/bash (解释器)--> 必须以这个开头
#注释[作者,邮件,功能描述]
代码
3、执行 (给权限 x ,执行)
案例:
1、hello world
2、自动配置yum源
===============================================
echo $? 上一条问题是否正确 为0 是对 非0是错
read -p "提示" 变量 只定义变量,不赋值
[1]
#!/bin/bash
useradd $1
echo $2 | passwd --stdin $1
[2]
#!/bin/bash
read -p "请输入用户名:" user
stty -echo
read -p "请输入密码:" pass
stty echo
useradd $user
echo $pass | passwd --stdin $user
stty -echo 隐藏输入文字
stty echo 恢复界面
三个引号:
双引:可以界定一个完整字符串
touch a b
touch "a b"
结果不一样
单引 :一个完整的字符串,并且屏蔽特殊符号
[root@server0 ~]# a=11
[root@server0 ~]# b=22
[root@server0 ~]# echo "$a $b"
11 22
[root@server0 ~]# echo '$a $b'
$a $b
反引号:
=$ (命令) 提取的是命令的结果
day2:
1、定义变量:
变量名=值
$0 $1 $2 $3 $# $*
date +%F
=时间格式 2017-12-23
Shell 脚本的运算:
整数运算:
1、expr 数字1 符号 数字2
expr 1 + 1 # expr 数字1 * 数字2 (乘)
2 # ecpr 数字1 / 数字2 (除)
expr 10 % 3 (取余数)
1 (余数< 除数)
2、 $[] (计算显示结果)
1) x=11 y=12
echo $[x+y]
# 23
3、let (计算不显示结果)
x++ x=x+1
x-- x=x-1
x+=2 x=x+2
x=2 x=x2
x/=2 x=x/2
x=1
let x+2
[root@server0 ~]# x=1
[root@server0 ~]# let x++
[root@server0 ~]# echo $x
2
scale=2 (指定小数点位为几个)
[root@server0 ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
2.2+5.8
8.0
2.3*3.3
7.5
2/10
0
scale=2
2/10
.20
================================================
1、字串
【 "root" == "root" 】相等
echo $?
0
[ "root" != "z" ] 不等
echo $?
0
想在一行里,打多个命令
; && ||
A && B 执行A 只有A 执行成功后 才执行B
A || B 执行A 只有A 执行失败后 才执行B(有你没我)
A ; B 执行A ,执行B (同时执行)
#!/bin/bash
read -p "请输入用户名:" user
read -p "请输入秘密:" pass
[ -z $user ] && read -p "你眼瞎阿输入用户:" user
[ -z $pass ] && read -p "你眼瞎阿输入秘码:" pass && exit
useradd $user
echo $pass | passwd --stdin $user
[ root == root ] && echo Y || echo N
[ root == tom ] && echo Y || echo N
[ -z $tty ] tty 变量是空
数字
-eq =
-ne !=
-gt >
-ge >=
-lt <
-le <=
=================================================每分钟,判断计算机登陆用户的数量 如果大于2 则发送邮件报警:
#!/bin/bash
s=who | wc -l
[ $s -gt 2 ] && echo "安全" ||mail -s "test" root < ss.txt
================================================
3 、文件或目录
-e 是否存在
-f 是否存在,且是文件
-d 是否存在,且是目录
-r 是否可读
-w 是否可写
-x 是否可执行
[ ! -d /abc ] && mkdir /abc
cp a.txt /abc/
[ -d /abc ] || mkdir /abc
cp a.txt /abc
==================================================
if 语法:
1、单分支 (只能判断对的)
if [判断】;then
命令
fi
如果80端口未启动,则启动httpd
1、有没有包 rpm -q httpd
#!/bin/bash rpm -q httpd if [ $? -ne 0 ];then yum -y install httpd > /dev/null fi netstat -antup |
grep :80 (看端口的状态) if [ $? -ne 0 ];then systemctl restart httpd systemctl enable httpd fi |
---|
2、双分支(判断错和对)
if [判断];then
命令
else
命令
fi
ping -i0.1 172.25.0.10 (加快ping 的速度)
ping -W0.1 (加快ping 不通 时的速度)
==============================================
#!/bin/bash
ping -c2 -i0.1 -W1 $1 &>/dev/null
if [ $? -eq 0 ];then
echo "$1 is 活的"
else
echo "$1 is 死了"
fi
测试
[root@desktop0 ~]# ./2.sh 192.168.4.7
3、多分支
if [判断];then
命令
elif [判断];then
命令
elif[判断];then
命令
else
命令
fi
#!/bin/bash
x=$[RANDOM%10]
read -p "请猜:" cai
if [ $cai -eq $x ];then
echo "恭喜发财"
exit
elif [ $cai -gt $x ];then
echo "太大了"
else
echo "太小了"
fi
#!/bin/bash
x=$[RANDOM%10]
read -p "请猜:" cai
if [ $cai -eq $x ];then
echo "恭喜发财"
exit
elif [ $cai -gt $x ];then
echo "太大了"
echo "正确数字:$x"
else
echo "太小了"
echo "正确数字:$x"
fi
==================================================