一些常用的Shell编程(脚本)命令和语句,可以满足一般需求。
接收到的命令参数:
参数个数: $#
参数值: 命令本身:$0 第一个参数:$1 第二个参数:$2 ……
退出命令: exit
echo命令:
换行: echo
输出后不换行: echo -n "请选择(y/n)?"
利用转义符号输出双引号: echo "欢迎使用\"正式服务器\"部署工具。"
输出中带变量: echo "即将部署项目:$project_name"
输出带转义符的字符串: echo -e "first\tsecond"
输出到文件 追加到文件尾:echo -e $log_info >> deploy.log 覆盖文件内容:echo -e $log_info > deploy.log
printf命令: (可以代替echo,格式化输出,和C语言中的printf函数功能相同)
输出一个小数点后两位的数,并换行: printf "The number is %.2f.\n" 100
输出一个指定宽度的字符串: 左对齐:printf "%-20s %-15s %10.2f\n" "Stephen" "Liu" 35 右对齐:printf "|%10s|\n" hello
变量:
定义: profile="production"
使用: echo $profile
变量拼接: log_info="$log_info,$target_ip"
数组:
定义: servers=("192.168.0.31" "192.168.0.39") projects=("public" "industry" "logistics" "misc")
获得整个数组: ${projects
}
获得数组元素个数: ${#servers[@]}
if 语句(条件判断同样适用于while语句和for语句):
判断一个变量(project)是否非空: if [ $project ];then echo "Variable \"project\" is null." fi
判断不等于: if [ $# -ne 3 ];then echo "命令行参数不是3个" fi
布尔值判断: if [ "$is_ip_correct" = false ];then echo "无效的ip地址,请使用下面ip之一:" echo ${servers
} exit fi
字符串相等判断: if [ "$confirm" == "y" ] && [ "$confirm" != "n" ];do # do something... fi
正则表达式判断 if [[ $1 =~ ^public|industry$ ]] && [[ $3 =~ ^[yn]$ ]];then # do something... fi
if [[ ! $deploy_more =~ [yn] ]];then # do something... fi
判断文件是否存在: if [ ! -f target/$project.war ];then # do something...
fi
判断目录是否存在: if [ -d $2/webapps/$1 ];then # do something... fi
判断一个文件名(字符串)的后缀 backup_file="/backup/java_data/$1-$today.war" backup_file="/backup/java_data/$1-$today.gz"
if [ "${backup_file##*.}" = "war" ];then cp $backup_file $1.war elif [ "${backup_file##*.}" = "gz" ];then tar zxvf $backup_file else echo "备份文件格式不对" exit fi
read 语句(读取用户输入的字符串):
最简单的用法:读取用户输入到变量yes_or_no read yes_or_no
提示用户输入y或n read -e -p "是否备份:(y/n)?" -i "y" needbackup (参数说明:-e:不知有什么用,但如果去掉了,-i就失效了;-p:后面接着提示语句;-i:后面接着缺省输入;最后一个参数是保存用户输入的变量。)
select 语句(提示用户从列表中选择一个):
修改默认提示语(默认值是"#?"): PS3="请选择一个项目:"
提示用户从数组中选择一个值: select project in ${projects
};do if [ $project ];then break fi done
或加上退出条件: select target_ip in ${servers
} "Exit(退出)";do if [ "$target_ip" = "Exit(退出)" ]; then echo "谢谢使用!Good-Bye!" break fi
if [ $target_ip ]; then # do something fi done
case 语句: case $project in public) project_name="大众版" ;; logistics) project_name="配送版" ;; misc) project_name="杂项版" ;; esac
while 语句:
配合正则表达式判断使用: while [[ ! $needbackup =~ ^[yn]$ ]];do read -e -p "是否备份:(y/n)?" -i "y" needbackup done
用“...”做进度条 echo -n "等待$port 端口打开……" while [ ! $pid_new ];do #sleep 1 pid_new=`netstat -nlp | grep $port | awk '{print $7}' | awk -F "/" '{print $1}'` echo -n "…" done
for语句:
遍历: for ip_t in ${servers
};do if [ "$2" = "$ip_t" ];then is_ip_correct=true break fi done
调用其他程序:
使用``,并获得输出结果: PS3="请选择一个分支:" select branch in `svn list svn:///java/code/branches`;do if [ $branch ];then svn_dir="svn:///java/code/branches/$branch" project_dir=$branch break fi done
使用$(),并获得输出结果: today=$(date +%Y-%m-%d/%H:%M:%S) svn_version=$(svn info $svn_dir | grep "Last Changed Rev:" | awk '{print $4}')
无声地调用其他程序(不输出结果,即把结果输出到一个null设备中) rm $2/logs/m* $2/logs/l* $2/logs/h* $2/logs/catalina.2015* &>/dev/null &
awk(用来对字符串进行切片处理,一般配合grep使用):
获得以空格分隔的第四个字符串: svn_version=$(svn info $svn_dir | grep "Last Changed Rev:" | awk '{print $4}')
获得以特殊分隔符("/")分隔的第一个字符串 awk -F "/" '{print $1}'
获取所有端口号为 $port 的进程,并杀掉 for pid in `netstat -nlp | grep $port | awk '{print $7}' | awk -F "/" '{print $1}'` do echo "==========================Warning========================" echo "无法正常关闭进程,端口:$port,直接kill掉,进程号:$pid" echo "==========================Warning========================" kill $pid done
分享到:
相关推荐
Bash是目前最广泛使用的Shell,提供了丰富的内置命令和功能。在编写Shell脚本时,你需要了解如何定义变量、控制流程(如条件语句if/else和循环for/while)、函数、重定向输入输出以及使用各种Shell特殊字符,例如...
总之,掌握Linux Shell编程和常用命令对于任何Linux用户来说都是极其重要的,无论是日常使用还是系统管理,都能大大提高效率。通过不断的实践和学习,你将能够编写出更复杂的脚本来解决实际问题。
《Shell编程与Unix命令》是一本深入探讨Unix操作系统和Shell脚本编程的综合教程。书中的内容分为两大部分,前半部分(第1至15章)主要介绍Unix环境及常用命令,而后半部分(第16至30章)则专注于Shell脚本的编写技巧...
《Linux命令行与Shell脚本编程大全》是一本专为Linux初学者编写的经典教材,旨在帮助读者深入理解和掌握Linux操作系统中的基本命令行操作以及Shell脚本编程技术。这本书全面覆盖了从基础到进阶的各种主题,对于想要...
Shell脚本编程是Linux系统管理中的重要技能,它允许用户自动化执行一系列命令,大大提高工作效率。以下是一些关于Shell脚本编程的关键知识点: 1. **Hello World脚本**:这是所有编程语言的基础,用于验证环境设置...
在IT领域,Shell编程和Unix命令是至关重要的技能,尤其对于系统管理员和开发者而言。Shell是一种交互式的命令解释器,它允许用户与操作系统进行交互,执行各种任务。Unix命令则是预定义的一系列程序,用于执行特定的...
除了基础命令,还有许多高级命令和工具,如管道(`|`)用于连接命令,重定向(`>` 和 `)用于改变输入和输出流,以及`awk`和`sed`这样的文本处理工具。 在Unix系统中,组合这些命令可以构建出强大的工作流程。例如...
shell编程是 Linux 和 Unix 操作系统中一种强大的编程语言,可以用来编写脚本以自动执行各种任务。下面是 shell 编程命令的详解。 一、基本语法 * `#!/bin/bash`:这是一个约定的标记,告诉系统这个脚本需要什么...
从提供的文件内容来看,这是一本关于Shell脚本编程的实战教程书籍,以实例的方式教授读者如何使用Shell脚本来完成各种Linux系统运维任务...对于希望深入学习Linux系统和Shell编程的读者,这是一本非常实用的学习资源。
这篇博客文章“shell编程和UNIX命令21-30”可能涵盖了从基本到高级的多种命令和技术,下面我们将详细探讨这些知识点。 1. **Shell编程基础**:Shell脚本是一种解释型语言,常见的有Bash(Bourne-Again SHell),它...
本文将深入探讨Shell编程的基础知识,包括基本语法、常用的内置命令、条件语句、循环结构以及函数的使用,旨在帮助初学者快速入门,并逐步提升为Shell脚本专家。 首先,让我们了解什么是Shell。Shell是操作系统提供...
Shell编程是一种在Unix/Linux操作系统环境下进行系统管理与自动化任务的强大工具。它允许用户通过命令行接口执行一系列操作,包括文件管理、系统控制、程序执行等。这篇文档将深入讲解Shell脚本的基础知识及其在实际...
Shell脚本编程是Linux/Unix系统中的重要技能,它是一种用于自动化任务、管理系统和实现批处理操作的脚本语言。在Linux环境中,Bash(Bourne-Again SHell)是最常用的Shell,它扩展了原始的Bourne Shell功能,并且在...
Linux Shell脚本编程实例是指使用Linux Shell编程语言编写的脚本程序,用于自动化系统管理、数据处理、网络管理等任务。Shell脚本语言是Linux操作系统的命令解释器,它可以读取用户的命令,并将其转换为机器语言,...
**Shell编程和Unix命令**是Linux和Unix系统中不可或缺的基础知识,它们构成了系统管理与自动化任务的核心。本书的前20章涵盖了从基础到进阶的广泛内容,无论是初学者还是经验丰富的用户,都能从中受益。 1. **文件...
### Linux常用命令及Shell编程详解 #### 一、Shell脚本的重要性及原因 Shell脚本在Linux和Unix环境中扮演着非常重要的角色。它们能够帮助用户自动化执行一系列的任务,从而节省大量的时间和精力。以下几点详细解释...
"Linux与UNIX Shell编程指南" Linux与UNIX Shell编程指南是计算机科学领域中一本经典的指南...Linux与UNIX Shell编程指南提供了丰富的Shell编程技术和知识,帮助读者快速掌握Linux与UNIX操作系统下的shell编程技术。