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=x*2
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 0scale=2 2/10 .20

================================================ 1、字串 【 "root" == "root" 】相等

echo $?

[ "root" != "z" ] 不等

echo $?


想在一行里,打多个命令 ; && || 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

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