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

==================================================