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、 $[] (计算显示结果)
- 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
==================================================