Linux里你必须掌握的Shell语法



For循环

##通常For循环用来执行一些重复不变步骤
		for i in `ls /tmp`    ##为ls /tmp设置变量为i
	   	do 		      ##所以执行do与Done内的操作,do对应需要done结尾
		rm -rf $i	      ##删除ls /tmp查询到的内容
		done
##参考
         #!/bin/sh
         for i in `seq 10`
         do
         echo $i
         done
##分库备份
#!/bin/bash
dbpass="dahaoshanhe123"
dbsock=/u01/instance/3306/3306.sock
dblist="show databases;"|grep -Evi "Database|info|per|test|mysql"
dbopt="-B -F --single-transaction --master-data=2 --set-gtid-purged=OFF --triggers --routines --events"

for dbname in `mysql -uroot -p${dbpass} -S ${dbsock} -e $dblist`
do
/usr/local/mysqlone/bin/mysqldump -p${dbpass} -S ${dbsock} ${dbopt} $dbname |gzip >  /u01/instance/3306/backup/${dbname}_$(date +%F)_$(date +%T).sql.gz
done

IF 判断语句

常用条件判断:

===判断文件是否存在

-f  判断某普通文件是否存在

-d  判断某目录是否存在

===判断文件权限

-r  判断文件是否为可读的属性

-w  判断文件是否为可以写入的属性

-x  判断文件是否为可执行的属性

===值比较

-eq  等于 应用于:整型比较

-ne  不等于 应用于:整型比较

-lt  小于 应用于:整型比较

-gt  大于 应用于:整型比较

-le  小于或等于 应用于:整型比较

-ge  大于或等于 应用于:整型比较

===逻辑的(and)与(or)

&&   逻辑的 AND 的意思, -a 也是这个意思

||  逻辑的 OR 的意思, -o 也是这个意思

格式一:
#!/bin/bash
echo '				##打印一个菜单,以单引号开头结尾
===============================
     1+1=?
===============================
'         
read -p '请输入你的答案': nub		##read -p  添加注释,nub代表用户输入的内容
        
if [ $nub -ne 2 ];then				##对用户输入的值进行判断,如果不为2,then代表则执行下面操作
echo "这都能算错,洗洗睡吧"			##如果输入值不等2 反馈信息-->"这都能算错,洗洗睡吧"
else							   ##否则
echo "小伙子很机智嘛"				   ##反馈-->"小伙子很机智嘛"
fi

格式二:
#!/bin/bash
echo '
===============================
     1+1=?
===============================
'         
read -p '请输入你的答案': nub
        
if [ $nub -ne 2 ];then
echo "这都能算错,洗洗睡吧" 
elif [ $nub -eq 2 ];then
echo "小伙子很机智嘛"
fi

##牢记常见的条件判断比如-eq,-ne,以及if判断的语法格式,[]内判断写法,前后需要有空格

While循环

格式:
while < 孩子年龄 > 18 >    ##循环判断,孩子是否满18周岁
do
不可以去网吧			##判断不满足条件,不可以去网吧,脚本结束
done

案例一:
#!/bin/bash
##连通性观察记录小脚本
##得出的的结果应该是18秒每次的间隔,添加监控IP只需要修改PIP的变量值即可
##运行时只需要sh shell_name &
##结束时只需要获取PID号码进行kill即可
PPATH=/root/IP监控/                             #设置一个存放连通性记录文件的位置
PIP="192.168.56.22"                             #添加一个要测试的IP
echo $$ > /root/IP监控/ping.pid        #打印该进程id到指定文件
[ ! -d $PPATH ] && mkdir -p $PPATH      #判断该路径是否存在,如果不存在则创建该路径
 
while true         #使用while无条件循环,若true永远执行该脚本除非手动停止,当然这个根据场景
do
/bin/ping $PIP -c 4 >/dev/null 2>&1             #在这里ping 4个失败的包将花去13秒
if [ $? -ne 0 ];then                            #判断上一步ping执行是否成功,判断若不成功则执行下一步
/bin/date >> $PPATH${PIP}.txt                   #打印ping不成功当前时间
fi
sleep 5                 #这里睡眠5秒,继续返回进行下一轮循环
done

## while true  #无限循环,除非手动停止
## while [-f /tmp/11]  ##如果/tmp下存在11文件则循环do-done的操作,当11不存在时脚本结束

Case语句

案例一:
#!/bin/sh
echo '
===============================
        1. install http
        2. install mysql
===============================
'
read -p '请输入需要安装的程序编号': nub
case "$nub" in
        1)				##若用户输入的nub的变量值为1,则执行该步骤
                yum install httpd -y	##执行的操作
        ;;							  ##固定格式,最后一个选项esac前不需要添加该符号
        2)				##若用户输入的nub的变量值为2,则执行该步骤
                yum install -y iftop
        ;;
        *)				##若输入的内容不上以上的选项
                echo "Please input [1/2]"
esac				##case开头,case结尾

案例二:
case "$1" in
        1)				##若用户输入$1的变量值为1,则执行该步骤
                yum install httpd -y	##执行的操作
        ;;							  ##固定格式,最后一个选项esac前不需要添加该符号
        2)				##若用户输入的nub的变量值为2,则执行该步骤
                yum install -y iftop
        ;;
        *)				##若输入的内容不上以上的选项
                echo "Please input [1/2]"
esac				##case开头,case结尾

Shell函数

#!/bin/bash
. /etc/init.d/functions			##加载函数

function start(){				##定义一个start的启动函数,{}内为执行函数进行的动作操作
service httpd start > /dev/null 2>&1
if [ $? = 0 ];then
action "启动中..." /bin/true	  ##若启动无报错,则显示[  OK  ]
else
action "启动中..." /bin/false	  ##若启动无报错,则显示[FAILED]
fi
}

function stop(){
service httpd stop > /dev/null 2>&1
if [ $? = 0 ];then
action "停止中..." /bin/true
else
action "停止中..." /bin/false
fi
}

function main(){
if [ $1 = "start" ];then
start
elif [ $1 = "stop" ];then
stop
fi
}

main $*			##这里的$*就是把命令行接受的参数作为函数参数传给函数内部,是一种常用的手法


Expect交互自动化

当安装某个服务时,程序会交互的方式要求用户配置程序,比如在配置Redis、MySQL、OSSEC时

[[email protected] ~]# mysql_secure_installation 
Set root password? [Y/n] Y
New password: 
Re-enter new password: 
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

使用Expect后这些Y将由程序代替人工输入,对于某些没有RPM包的程序,比如OSSEC实现自动化部署成为一个可能

关于Expect更多资料可以查看本博客expect自动化交互脚本(1-3)

原文地址:http://blog.51cto.com/swiki/2073456

时间: 2024-10-12 14:06:56

Linux里你必须掌握的Shell语法的相关文章

Linux shell编程(二):shell语法

shell 语法 shell 执行命令操作 当shell读取输入时,它将执行一系列操作.如果输入表示注释的开头,则shell将忽略注释符号('#')和该行的其余部分. shell 读取和执行命令时将经过下列操作: 从一个文件(Shell脚本)中读取它的输入,从作为参数的字符串到 "-c" 调用选项(调用Bash),或者从用户的终端. 将输入拆分为单词和操作符,遵守所描述的引用规则.这些标记由"元字符"分隔.此步骤执行别名扩展. 将令牌解析为简单的复合命令. 执行各种

Linux 学习作业:认识bash shell

本次记录bash shell基础知识及bash变量功能,bash操作环境的配置内容,涉及解释什么是shell?.bash变量的定义和引用.怎样读入与设定bash的环境配置文件等. ? Shell的基本概念 1. Shell是什么? Linux系统由3个重要部分组成: w 内核(kernel) w Shell w 应用程序 内核真正在控制着计算机系统上的各种硬件与软件.功能包括进程管理.内存管理.设备管理.文件系统管理等等. 内核相当抽象,使用者不易和它直接通信,因此需要一个良好的接口,使得操作时

Linux网络配置及SSH和Shell基础

Linux网络配置及SSH和Shell基础 一.Linux网络配置     ifconfig命令被用于配置和显示Linux内核中网络接口的网络参数.用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在.要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了. 二.hosts文件的作用及修改主机名      Hosts : The static table lookup for host name(主机名查询静态表)       Linux 的/etc/hosts是

Linux 常用命令解析及Bash Shell脚本用法示例

 摘要 Linux 命令是基于文本格式输入输出的一种程序,按照Unix哲学中强调的程序功能简单,输入宽松,输出严谨,各种程序组合可以具有更强大的功能,而具有这种灵活性的主要原因是Linux规定程序的输入输出必须坚持文件流格式,即文本格式,而这就是Linux系统的核心之一. 对于Bash,即Shell的一种,为现在主流Linux发行版本默认的命令行解释器,是一种功能强大的工具,可以实现对Linux支持的程序命令的组合,从而实现强大功能.类似于Window系统的bat文件,Bash具有更为强大的

linux里source、sh、bash、./有什么区别(转)

add by zhj: 主要不同是,source是在当前shell中执行脚本,而sh, bash, ./是在当前shell的child shell中执行脚本 原文:http://www.cnblogs.com/pcat/p/5467188.html 在linux里,source.sh.bash../都可以执行shell script文件,那它们有什么不同吗? ----------- 1.source source a.sh 在当前shell内去读取.执行a.sh,而a.sh不需要有"执行权限&q

linux 里 /etc/passwd 、/etc/shadow和/etc/group 文件内容解释

•/etc/passwd文件用于存放用户账户信息,每行代表一个账户,每个账户的各项信息用冒号分割,例如: root:x:0:0:root:/root:/bin/bash username:password:uid:gid:allname:homedir:shell 1.用户名. 2.密码,“x”代表密码存储在/etc/shadow中:当该值为其他任意非“x”值时,可以通过root用户切换(不需要密码),但是都无法通过非root用户切换到相应用户,因为无法获得起密码了. 3.uid,用户id,0-

Linux 常用命令解析和Bash Shell使用示例脚本演示

 摘要 Linux命令是基于文本格式输入输出的一种程序,依照Unix哲学中强调的程序功能简单,输入宽松,输出严谨,各种程序组合能够具有更强大的功能,而具有这样的灵活性的主要原因是Linux规定程序的输入输出必须坚持文件流格式.即文本格式,而这就是Linux系统的核心之中的一个. 对于Bash,即Shell的一种.为如今主流Linux发行版本号默认的命令行解释器,是一种功能强大的工具.能够实现对Linux支持的程序命令的组合.从而实现强大功能.类似于Window系统的bat文件,Bash具有更

linux里引号注意点

python 中会把所有不带引号的(双引号或单引号)字符串都视作变量,会去尝试解释它,如果没有值则报错所以,想要引入一个字符串就必须加引起号 shell中关于引号 shell中系统会把单绰号中的字符都视作字符本身,没有任务他意.而在双引号里部分特殊字符照常会被解释,如("$",反引号"`")等 grep,sed,awk中关于引号它们中单引号里的字符都不是会被系统shell所解释,但会被grep,sed,awk内部解释器解释.例如:grep -E '^a|b' fil

[转]在Linux里设置环境变量的方法

在Linux里设置环境变量的方法(export PATH) 一般来说,配置交叉编译工具链的时候需要指定编译工具的路径,此时就需要设置环境变量.例如我的mips-linux-gcc编译器在“/opt/au1200_rm/build_tools/bin”目录下,build_tools就是我的编译工具,则有如下三种方法来设置环境变量: 1.直接用export命令:#export PATH=$PATH:/opt/au1200_rm/build_tools/bin查看是否已经设好,可用命令export查看