揍 它是一个计算机程序,其功能是解释订单。 它基于外壳 Unix的 并为该项目而写 GNU 是大多数发行版中的默认外壳 GNU / Linux的。 他的名字是的首字母缩写 伯恩再造壳 (另一个壳伯恩),发挥文字 (重生意味着重生) 上 伯恩贝壳(sh),它是Unix最早的主要解释器之一。
今天,我们将展示一些对开发人员非常有用的shell脚本。 大多数工作在任何外壳中 Unix的,尽管有些要求它们必须由 揍.
防止非特权用户运行脚本
一些脚本执行管理任务,因此我们可能只希望root用户运行该脚本。 在这种情况下,我们可以使用如下代码:
#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "Este script debe ser ejecutado por el usuario root" 1>&2
exit 1
fi
只允许对特定用户执行脚本
与上面的代码类似,我们可能只希望特定的用户运行脚本。 我们这样做:
#!/bin/bash
AUTHORIZED_USER="usuario_permitido"
if [ $USER != $AUTHORIZED_USER ]; then
echo "Este script debe ser ejecutado por el usuario $AUTHORIZED_USER" 1>&2
exit 1
fi
验证服务/进程正在运行
如果我们想知道是否有任何服务或程序正在运行,可以使用此脚本 (在这种情况下,它验证了 阿帕奇 在跑):
#!/bin/sh
SERVICE='httpd'
if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
echo "El servicio $SERVICE esta ejecutandose"
else
echo "Chanfle! El servicio $SERVICE esta detenido"
fi
创建一个锁定文件
有时我们必须确保脚本不会同时运行两次或多次。 为此,我们可以使用锁定文件。 这是脚本的简单版本,可让我们执行以下操作:
#!/bin/bash
lockfile=/var/lock/loquesea.lock
if [ ! -e $lockfile ]; then
touch $lockfile
echo "hago muchas cosas importantes aqui"
rm $lockfile
else
echo "ya hay otro proceso corriendo"
fi
在这种情况下,将验证文件 随便锁 存在。 如果存在,脚本将不执行其任务。 如果不存在,它将创建文件,运行需要运行的任务,然后将其删除。 但是,这并不完全可靠。 如果在脚本运行时突然关闭该怎么办?
在那种情况下,锁定文件不会被删除,因此它将不允许我们再次运行脚本。 为了解决这些情况,我们可以使用trap命令,以使我们可以在脚本意外结束的情况下执行命令。 这是一个更高级的版本,还将执行该脚本的脚本的PID保存在锁定文件中:
#!/bin/bash
lockfile=/var/lock/loquesea.lock
if ( set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null;
then
trap 'rm -f "$lockfile"; exit $?' INT TERM EXIT
echo "hago muchas cosas aqui tranquilamente"
rm -f "$lockfile"
trap - INT TERM EXIT
else
echo "Ya hay otro proceso de este script ejecutandose"
echo "corriendo con el PID: $(cat $lockfile)"
fi
让我们更好地了解命令 陷阱。 它的语法基本上是这样的:陷阱命令信号[signal…]; 其中signal是要捕获的终止信号。 如果要查看可用信号的列表,可以运行命令kill -l。 对于前一种情况,使用了INT信号 (捕获由Ctrl + c产生的终止),期限 (由kill命令产生的终止) 和退出 (正常终止脚本,要么是因为没有更多的行可运行,要么是因为它遇到了退出命令).
选项菜单
为了制作一个菜单,允许用户选择一系列选项,我们可以使用以下方案:
#!/bin/bash
clear
while :
do
echo " Escoja una opcion "
echo "1. quien soy?"
echo "2. cuanto espacio tengo"
echo "3. que es esto?"
echo "4. Salir"
echo -n "Seleccione una opcion [1 - 4]"
read opcion
case $opcion in
1) echo "este eres:";
whoami;;
2) echo "tienes esto";
df;;
3) uname -r;;
4) echo "chao";
exit 1;;
*) echo "$opc es una opcion invalida. Es tan dificil?";
echo "Presiona una tecla para continuar...";
read foo;;
esac
done
在运行脚本之前要求确认
有时,让用户确认一批语句的执行很有用,即要求用户键入“是”或“否”的典型消息。 我们可以这样做:
#!/bin/bash
while true; do
echo
read -p "esta seguro de hacer lo que sea que vaya a hacer " yn
case $yn in
yes ) break;;
no ) exit;;
* ) echo "por favor responda yes o no";;
esac
done
echo "si se ejecuta esto es que aceptaste"
文章结尾。 简直很棒😀
编辑: 您必须注意空格和制表符,由于某些原因它们不会出现¬¬
他妈的他们很棒O_O ...它将对我在Bash中所做的小事情有很大帮助😀
脚本超棒!真的是我一直在寻找的巨大贡献。
PS:论坛关闭了。
是的,安装论坛的服务器处于脱机状态,不知道为什么...我们给处理此事的朋友写了一封电子邮件,以了解他对我们的回应respond
问候。
嗯,我们希望它没什么大不了的。
忍者密码中也包含了“ chaff”吗? XD
我喜欢bash power的功能,他们告诉我C语言的用途是……,因为在shell脚本中有许多熟悉的命令。
谢谢,我真的很喜欢
输入参数的验证非常有用。 我不知道如何制作菜单=)
大…。 现在我可以给脚本加些“硬度”
很高兴看到我们在CodeNinja的不起眼的工作如何为国际Linux社区服务
明确! 🙂
一切都是为了共同帮助和贡献,而不是制造火焰,对吗? 😉
通过添加选项以选择要了解的流程,可以稍微改善正在运行的流程脚本,如下所示:
#!/斌/庆典
回显“选择服务”
阅读服务
#SERVICE ='mysql'
如果ps斧| grep -v grep | grep $ SERVICE> / dev / null
然后
回显“ $ SERVICE服务正在运行”
其他
回显“ $ SERVICE服务已停止”
我有非常实用的脚本,但是我正在寻找一个特殊的脚本来解决我遇到的问题,如下所示:我们公司中有一个应用程序服务器,内部用户可以通过telnet访问它,并执行一个特殊的应用程序,限制对于许可证,用户滥用并打开多个telnet来接管2个或多个许可证,因此我认为该脚本是通过某种方法检查哪个telnet进程在超过2小时内处于非活动状态,因此向该终端发送kill pid,你能帮我吗?
安装以下程序
aptitude安装自动日志
并且您在/etc/autolog.conf中有配置文件
太好了,朋友,我可以问你一个问题,我需要一个带选项的shell脚本,我已经基于它编写了脚本,并且效果很好,但是其中一个选项必须发送电子邮件(使用postifix),它要求输入主题,文本屏幕上显示收件人,收件人以及发送和检查邮件的内容,并通过mailq查看队列并查看是否已发送,但是如何使用接收主题,文本和收件人的变量通过命令发送邮件? 🙁
Escríbeme a mi email (kzkggaara[at]desdelinux[dot]net) para hablar con más calma, te ayudo con mucho gusto 🙂
非常感谢朋友,您通过了!
你好
我仅在需要菜单时才遇到这些出色的示例。
我已经启动了它,但无法正常工作(在前面的步骤中)。
我有247个元素,它们引用不同的领土领域。
我需要的是一个从中选择国家的菜单:
#!/斌/庆典
清除
而:
do
回声»选择国家尝试»
回声«1。 阿富汗(AF)»
回声«2。 阿尔巴尼亚(AL)»
回声«3。 德国(DE)»
回声«5。 安哥拉(AO)»
回声«6。 安圭拉(AI)»
..一直持续到247
echo -n“选择一个选项[1-247]”
读取选项
案例$选项
1)回声“这就是你:”; whoami ;;
2)回声“你有这个”; df ;;
3)回显“”; uname -r ;;
4)echo“ bye”;退出1 ;;
5)回声“这就是你:”; whoami ;;
6)回声“这就是你:”; whoami ;;
…并持续到247
*)echo«$ opc是无效的选项。 很难吗?”
回声“按一个键继续...”;
读foo ;;
ESAC
完成
行为如下:
除4以外的任何选项(输出)都会删除输入的号码并等待新的号码。
输入4出来。
如果我将4的代码放在其他任何行中(比如说150),它同样可以正常出现。
我也尝试将代码设置为以下格式:
151)回响“这是你:”;
我是谁 ;;
具有相同的结果。
我不知道是否有这么长的菜单更好的选择,当然我也做错了。
一个帮助将不胜感激,谢谢
很棒...我认为进入外壳非常好
谢谢
太好了,嘿,我如何使bash与文件一起工作
例如:
上传.sh fotodelavecina.jpg
以为我的bash脚本“ upload.sh”具有对ftp的访问信息
问候和感谢😀
好人,非常感谢您提供的所有脚本,我已经设置了CentOS服务器,您不知道这些模板对我的影响如何,请通过电子邮件与我联系。 我想向你求婚
为什么在制作菜单时使用read foo? 我需要的快速答案