当前位置:首页 » 编程软件 » bash编程if

bash编程if

发布时间: 2023-03-28 11:28:42

A. shell编程,if,else之后怎么执行多条语句只能用&&

#!/bin/bash

TODAY=$(date +"%d")

if [ $TODAY == 01 ]; then
echo $(date +"%Y-%m-%d %H:%M:%S.%N" | cut -b 1-23) "full backup 01. "
echo $(date +"%Y-%m-%d %H:%M:%S.%N" | cut -b 1-23) "fffffff. "
echo $(date +"%Y-%m-%d %H:%M:%S.%N" | cut -b 1-23) "ddddddd. "
echo $(date +"%Y-%m-%d %H:%M:%S.%N" | cut -b 1-23) "f123456 "

elif [ $TODAY == 15 ];then
echo $(date +"%Y-%m-%d %H:%M:%S.%N" | cut -b 1-23) "full backup 15. "
tar Jcf /opt/$(date +"%Y%m%d").tar.xz /tmp/*
else
echo '111111111'
fi

B. bash shell中if [-f $2]和echo -e是什么意思

if [ -f $2 ]
do
command
done
if后接的是测试语句让搜薯, [ ] 中相当于test命令. -f $2 一般的意思是检测第二个位置参数是否存在

echo -e 后一般会接参数,
-e 若参数出现以下字符,则特别加以处理,而不会将坦者它当成一般
文字输出:
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入漏镇tab;
\v 与\f相同;
\\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
echo 语法:echo [-ne][字符串]或 echo [--help][--version]

C. bash shell编程中,如何使用if判断ifconfig|grep ppp0这样一条命令的返回

用命令取值,付值给一个变量,if该变量=0 then
balabalabala

D. Shell编程中 if语句判断时怎样写判断条件判断变量a若为整型变量则执行后面的语句

把if [ "$tt" ~ '/^[1-9][0-9]*$/手察' ] 改成
if [ "$tt" -le 0 -o "$tt" -ge 0 ] 2>/dev/null

这边是只会做整数的比较,如果$tt不是整数就会产生错误信息,并不比较。然后执行else后面的动作。产生的错误信息模薯搭可以用2>/dev/null丢掉。

如果是整数则进行[]内的比较,中间的-o表示或者,意思是整数$tt小于等于0或者大于等于0则为真,执行then后旦拿面的动作

E. linux bash;if命令

必须指定路径
类似的还有
if [ -f filename ] 测试是否是普通文件
if [ -z filename ] 测试文件是否为空
if [ -r filename ] 测试文件是否可读
if [ -w filename ] 测试文件是否可写

F. 10 分钟学会Linux常用 bash命令

显示所有的环境变量,如果你想获取某个变量的详细信息,使用 echo $VARIABLE_NAME .

Example:

whereis使用系统自动构建的数据库来搜索可执行文件,源文件和手册页面。

Example:

它在环境变量PATH指定的目录中搜索可执行文件。此命令将打印可执行文件的完整路径。

Example:

清除窗口上的内容。

列出您的文件。 ls 有很多选项: -l 列出“长格式”的文件,其中包含文件的确切大小,拥有该文件的人员,有权查看该文件,以及何时进行上次修改。 -a 列出所有文件,包括隐藏文件。有关此命令的更多信息,请检查此链接。

Example:

创建或更新您的文件。

Example:

它可以在UNIX或Linux下用于以下目的。

显示文件的第一部分(用空格移动并键入q以退出)。

输出文件的前10行。

输出最后10行文件。用于-f在文件增长时输出附加数据。

将文件从一个位置移动到另一个位置。

filename1 文件的源路径, filename2 是目标路径。

将文件从一个位置复制到另一个位置。

filename1 文件的源路径, filename2 是目标路径。

删除文件。在目录上使用此命令会给您显示一个错误: rm: directory: is a directory 。 为了删除目录,你必须传递 -rf 去递归删除目录中的所有内容。

比较文件,并列出他们的差异。

让您更改文件的读取,写入和执行权限。

压缩文件。

解压缩gzip压缩的文件。

让你查看gzip压缩文件,而不需要gunzip它。

打印文件。

查看打印机队列。

Example:

从打印队列移除某些内容。

awk是处理文本文件最有用的命令。它一行一行地在整个文件上运行。默认情况下,它使用空格分隔字段。awk命令最常用的语法是

让我们采取以下文件 /etc/passwd 。以下是此文件包含的示例数据:

所以现在让我们从这个文件只获取用户名。 -F 指定在我们要基于哪个分隔字段。在我们的例子中 : 。 { print $1 } 意味着打印出第一个匹配字段。

运行上述命令后,您将获得以下输出。

有关如何使用 awk 的更多细节,请查看以下链接。

查找文件内的文本。您可以使用grep搜索与一个或多个正则表达式匹配的文本行,并仅输出匹配的行。

Example:

您还可以通过使用 -i 选项强制grep忽略单词大小写。 -r 可用于搜索指定目录下的所有文件,例如:

-w 只搜索单词。有关 grep 详细信息,请查看以下链接。

告诉你一个文件中有多少行,多少单词和多少字符。

Example:

7459 是行数, 15915 是单词数, 398400 是字符数.

用于过滤和转换文本的流编辑器。

example.txt

用连字符替换所有空格

使用"d"替换所有的数字

排序文本文件的行

example.txt

sort example.txt

随机化一个排序的example.txt

报告或省略重复的行

example.txt

只显示example.txt的唯一行(首先你需要排序,否则看不到重叠)

显示每行的唯一项,并告诉我找到了多少个实例

从每行文件中删除部分。

example.txt

显示第2,7和9栏的空格作为分隔符

显示一行文字

显示 "Hello World"

用字母之间的换行显示 "Hello World"

简单的最佳文本格式化程序

example: example.txt (1 line)

将example.txt的行输出为20个字符的宽度

翻译或删除字符

example.txt

把所有小写字母变成为大写

把所有的空格变成换行符

显示文件的行数

example.txt

带行号显示 example.txt

打印匹配模式的行 - 扩展表达式(别名为:'grep -E')

example.txt

在其中显示“Lorem”或“dolor”的行

打印匹配模式到的行 - FIXED模式匹配(别名为:'grep -F')
example.txt

在example.txt中找到具体的字符串'(Lorem | doloar)'

生成一个新的目录。

执行这个,从一个目录转移到另外一个目录。

将你移动到主目录。此命令接受可选的 dirname ,将你移动到该目录。

告诉你你目前所在的目录。

ssh (SSH client) 是一个用来在登录到远程机器并执行的命令的程序。

此命令还接受 -p 可用于连接到特定端口的选项。

返回当前登录用户名。

允许当前登录的用户更改其密码。

显示您的磁盘配额。

显示当前日期和时间。

显示月份的日历。

显示当前的正常运行时间。

显示谁在线

Displays information about user.

显示内核信息。

显示指定命令的手册。

显示磁盘使用情况。

显示文件名中文件和目录的磁盘使用情况( -s只给出一个总数)。

列出您最后登录的指定用户。

列出您的进程。

使用您所提供的ID杀死(结束)进程。

用名称杀死所有进程。

显示当前活动的进程。

列出停止的或后台工作的Job; 恢复在后台停止的Job。

前台化最近的Job。
Brings the most recent job in the foreground.

Pings主机并输出结果。

获取域的whois信息。

获取域的DNS信息。

下载文件。

在本地主机和远程主机之间或两台远程主机之间传输文件。

从本地主机复制到远程主机

从远程主机复制到本地主机

此命令还接受 -P 选项可用于连接到特定的端口。

在bash中你将编写第一行脚本文件,被叫做 shebang 。任何脚本中的这一行来确定脚本的执行能力,如独立的可执行文件,而不是在终端中预先键入sh,bash,pythonphp等。

Example:

上面的一行创建一个变量str并给它赋值“hello world”。通过 $ 放在变量名的开头来检索变量的值。

Example:

像其他语言一样,bash也有数组。数组是包含多个值的变量。数组的大小没有最大限制。bash中的数组为零。第一个元素被索引为元素0.在bash中创建数组有几种方法。以下给出了哪些。

Examples:

要在特定索引处显示值,请使用以下语法:

如果没有提供索引,则假定为数组元素0。要了解数组中有多少值,请使用以下语法:

Bash也支持三元条件。下面是一些例子。

检查一些关于如何操作字符串的语法

Example:

当您运行上述示例时,该hello函数将输出“world!”。上述两个功能 hello 和 say 是相同的。主要区别是功能 say 。此功能打印其接收到的第一个参数。函数内的参数以与给脚本的参数相同的方式进行处理。

bash中的条件语句与其他编程语言相似。条件有许多形式,如最基本的形式是 if 表达式 then 语句,其中语句只有在表达式为真时执行。

有时,如果条件变得混乱,所以你可以使用相同的条件 case statements 。

Expression Examples:

bash 中有三种不同类型的循环。 for , while 和 until .

for 语法:

while 语法:

until 语法:

bash_profile 可以通过运行后面的命令打开。 nano ~/.bash_profile

nano ~/.bashrc

source ~/.bashrc
cd hotellogs

您可以通过传递不同的选项来轻松地调试bash脚本bash。例如-n,不会运行命令并仅检查语法错误。-vecho命令在运行它们之前。-x命令行处理后的echo命令。

G. shell编程中的if判断语句,为什么总是输出“str1 不等于 str2”

字符串的比较问题,
if [ str1 = str2 ]; then
改为:
if [ "$str1" = "$str2" ]; then

变量取值在前面加$,字符串记得加双引号。

H. IF的条件结构有哪些

if语句基本结构是这样:
if <条件1>
then
语句1
elif <条件2>
语句2
elif <条件...>
语句...
else
语句n
fi
注意if语句中并无尖括号< >。用你的条件表达式来替换掉 <条件> 这部分。
实际根据你的需要使用elif和else。因为Bash不同于C语言,他没有使用花竖搭括号来闭合一个作用域的写法。Bash的if语句闭合作用域使用的是 if 的“反语”——fi。
关于 then,if的条件后面都需要加一个保留字then。你也可以把它们写作同一行,但是需要注意的是要用分号来分隔,这些bash解释器才知道then不是if条件的一部分。否则会报错。
if <条件>;
then
写法举例
test及 [ ]条件
输入一个数字,并判断是否小于100
#!/bin/bash
read -p "请输入一个数字:" a
if [ $a -lt 100 ]
then
echo "a<100"
else
echo "a>=100"
判断当前目录下一个文件是否存在,若存在判断是否为目录文件。 #!/bin/bash
read -p "请输入一个文件名:" name
if [ -e $name ]
then
echo -n "$name存在,"
if [ -d $name ]
then
echo "并且是一个目录"
else
echo "但不是一个目录"
fi
else
echo "$name不存在"
其他命令作为条件
判断当前环境中是否安装了某一命令。
#!/bin/bash
read -p "请输入一个命令:" var
if which $var>/dev/null
then
echo "$var存在"
else
echo "$var不存在"
if与逻辑表达式
与其他语言一样,Bash中的if同样可以和 与或非 组合使用。并且通过结合内部或外数掘部的命令一起使用,能够达到其他语余毕拿言达不到的效果。
比如:
if [ -e $filename ] && rm $filename
then
echo "$filaname 不存在!"

I. shell脚本中的if中多条件语句如何写。

可以使用 if-elif-else 语法来写多条件语句。

1、首先要理解if-else的基本用法,if条件+then操作+else操作+fi闭合,书写方法如下:

2、 shell语法中[[ ]]和[ ]的主要区别

(1) [ ] 实际上是bash 中 test 命令的简写。即所有的 [ expr ] 等于 test expr。
对 test 命令来说, 用 -eq 要进行数字比较,而你此时传入字符串,就报错了。


(2) [[ ]] 是内置在shell中的一个命令,它比test强大的多。支持字符串的模式匹配(使用=~操作符时甚至支持shell的正则表达式)。逻辑组合可以不使用test的-a,-o而使用&& ||。

J. 有哪些好用的bash 技巧

简洁的bash编程技巧1) 检查命令执行是否成功第一种写法,比较常见:echoabcdee grep-q abcdif[ $? -eq0 ]; then echoFoundelse echoNot foundfi简洁的写法:ifechoabcdee grep-q abc; then echoFoundelse echoNot foundfi知唤当然你也可以不要if/else,不过这样可读性比较差:[SunNov 04 05:58 AM] [kodango@devops] ~/workspace$echoabcdee grep-q abc && echoFound echoNot foundFound2) 将标准输出与标准错误输出重定向到/dev/null 第一种写法,比较常见:1grepabctest.txt1>/dev/null2>&1常见的错误写法:1grepabctest.txt2>&1 1>/dev/null简洁的写法:1grepabctest.txt&> /dev/null3) awk的使用举一个实际的例子,获取Xen DomU的id。常见的写法:1sudoxm li grepvm_name awk'{print $2}'简洁的写法:1sudoxm li awk'/vm_name/{print $2}'销猛漏4) 将一个文本的所有行用逗号连接起来假设文件内容如下所示:[SatNov 03 10:04 PM] [kodango@devops] ~/workspace$cat/tmp/test.txt123使用Sed命令:123[SatNov 03 10:14 PM] [kodango@devops] ~/workspace$sed':a;$!N;s//n/,/;ta'/tmp/test.txt1,2,3简洁的写法:123[SatNov 03 10:04 PM] [kodango@devops] ~/workspace$paste-sd, /tmp/test.txt1,2,35) 过滤重复行假设文件内容如下所示:[SatNov 03 10:16 PM] [kodango@devops] ~/workspace$sort/tmp/test.txt常用的方法:[SatNov 03 10:16 PM] [kodango@devops] ~/workspace$sort/tmp/test.txt uniq123简单亏烂的写法:[SatNov 03 10:16 PM] [kodango@devops] ~/workspace$sort/tmp/test.txt-u6) grep查找单词假设一个文本的每一行是一个ip地址,例如[SatNov 03 10:20 PM] [kodango@devops] ~/workspace$cat/tmp/ip.list10.0.0.110.0.0.1210.0.0.123使用grep查找是否包括10.0.0.1这个ip地址。常见的写法:[SatNov 03 10:22 PM] [kodango@devops] ~/workspace$grep'10.0.0.1/>'/tmp/ip.list10.0.0.1简单的方法(其实这方法不见得简单,只是为了说明-w这个参数还是很有用的)123[SatNov 03 10:23 PM] [kodango@devops] ~/workspace$grep-w '10.0.0.1'/tmp/ip.list10.0.0.1顺便grep的-n/-H/-v/-f/-c这几参数都很有用。7) 临时设置环境变量常见的写法:[SatNov 03 10:26 PM] [kodango@devops] ~/workspace$exportLC_ALL=zh_CN.UTF-8[六11月 03 10:26 下午] [kodango@devops] ~/workspace$date2012年11月 03日 星期六 22:26:55 CST简洁的写法:[六11月 03 10:26 下午] [kodango@devops] ~/workspace$unsetLC_ALL[SatNov 03 10:27 PM] [kodango@devops] ~/workspace$LC_ALL=zh_CN.UTF-8 date2012年11月 03日 星期六 22:27:43 CST在命令之前加上环境变更的设置,只是临时改变当前执行命令的环境。8) $1,$2等位置参数的使用假设只想使用$2,$3..这几个参数,常见的做法是:12shiftecho$@为什么不这样写呢?1echo${@:2}9)退而求其次的写法相信大家会有这种需求,当一个参数值没有提供时,可以使用默认值。常见的写法是:arg=$1if[ -z $arg]; then arg=0fi简洁的写法是这样的:1arg=${1:-0}10)bash特殊参数–的用法假设要用grep查找字符串中是否包含-i,我们会这样尝试:[SatNov 03 10:45 PM] [kodango@devops] ~/workspace$echo'abc-i' grep-iUsage:grep[OPTION]... PATTERN [FILE]...Try'grep--help'formoreinformation.[SatNov 03 10:45 PM] [kodango@devops] ~/workspace$echo'abc-i' grep/-iabc-i简洁的方法是:123[SatNov 03 10:45 PM] [kodango@devops] ~/workspace$echo'abc-i' grep-- -iabc-ibash中–后面的参数不会被当作选项解析。11)函数的返回值默认是最后一行语句的返回值#Check whether an item is a function#$1: the function name#Return: 0(yes) or 1(no)functionis_function(){ localfunc_name=$1 test`type -t $1 2>/dev/null`= function}不要画蛇添足再在后面加一行return $?了。12) 将printf格式化的结果赋值给变量例如将数字转换成其十六进制形式,常见的写法是:12[SatNov 03 10:55 PM] [kodango@devops] ~/workspace$var=$(printf'%%%02x'111)简单的写法是:12[SatNov 03 10:54 PM] [kodango@devops] ~/workspace$printf-vvar '%%%02x'111看看printf的help[SatNov 03 10:53 PM] [kodango@devops] ~/workspace$help printf grep-A 1 -B 1 -- -vprintf:printf[-vvar] format[arguments] Formatsand prints ARGUMENTS under control of the FORMAT.-- Options: -vvar assign the output to shell variable VAR rather than displayit on the standard output13)打印文件行打印文件的第一行:1head-1 test.txt打印文件的第2行:1sed-n '2p'test.txt打印文件的第2到5行:1sed-n '2,5p'test.txt打印文件的第2行始(包括第2行在内)5行的内容:1sed-n '2,+4p'test.txt打印倒数第二行:12$tail-2 test.txt head-1$tac test.txt sed-n '2p'14)善用let或者(())命令做算术运算如何对一个数字做++运算,可能你会这样用:12a=1a=`expra + 1`为何不用你熟悉的:123a=1leta++leta+=215)获取软连接指定的真实文件名如果你不知道,你可能会这样获取:123[SatNov 03 11:12 PM] [kodango@devops] ~/workspace$ls-l /usr/bin/python awk-F'->''{print $2}' tr-d ''/usr/bin/python2如果你知道有一个叫readlink的命令,那么:123[SatNov 03 11:13 PM] [kodango@devops] ~/workspace$readlink /usr/bin/python/usr/bin/python216)获取一个字符的ASCII码[SatNov 03 11:14 PM] [kodango@devops] ~/workspace$printf'%02x''+2b[SatNov 03 11:30 PM] [kodango@devops] ~/workspace$echo-n '+' od -tx1 -An tr-d ''2b17)清空一个文件常见的用法:1echo> test.txt简单的写法:1>test.txt18) 不要忘记有here document下面一段代码:grep-v1 /tmp/test.txt whilereadline; do leta++ echo--$line--doneechoa:$a执行后有什么问题吗?[SunNov 04 05:35 AM] [kodango@devops] ~/workspace$sh test.sh--2----3--a:发现a这个变量没有被赋值,为什么呢?因为管道后面的代码是在在一个子shell中执行的,所做的任何更改都不会对当前shell有影响,自然a这个变量就不会有赋值了。换一种思路,可以这样做:grep-v1 /tmp/test.txt> /tmp/test.tmpwhilereadline; do leta++ echo--$line--done< /tmp/test.tmpechoa:$arm-f /tmp/test.tmp不过多了一个临时文件,最后还要删除。这里其实可以用到here document:b=1whilereadline2; do letb++ echo??$line2??done< < EOF`grep-v1 /tmp/test.txt`EOFechob: $bhere document往往用于需要输出一大段文本的地方,例如脚本的help函数。19)删除字符串中的第一个或者最后一个字符假设字符串为:12[SunNov 04 10:21 AM] [kodango@devops] ~/workspace$str=aremoveb可能你第一个想法是通过sed或者其它命令来完成这个功能,但是其实有很简单的方法:[SunNov 04 10:24 AM] [kodango@devops] ~/workspace$echo${str#?}removeb[SunNov 04 10:24 AM] [kodango@devops] ~/workspace$echo${str%?}aremove类似地,你也可以删除2个、3个、4个有没有一次性删除第一个和最后一个字符的方法呢?答案当然是肯定的:123[SunNov 04 10:26 AM] [kodango@devops] ~/workspace$echo${str:1:-1}remove关于这些变量替换的内容在bash的man手册中都有说明。20)使用逗号join数组元素假设数组元素没有空格,可以用这种方法:[SunNov 04 10:14 AM] [kodango@devops] ~/workspace$a=(1 2 3)$b=${a[*]}[SunNov 04 10:15 AM] [kodango@devops] ~/workspace$echo${b///,}1,2,3假设数组元素包含有空格,可以借用printf命令来达到:[SunNov 04 10:15 AM] [kodango@devops] ~/workspace$a=(1 234)[SunNov 04 10:15 AM] [kodango@devops] ~/workspace$printf,%s${a[@]} cut-c2- 1,23,421) Shell中的多进程在命令行下,我们会在命令行后面加上&符号来让该命令在后台执行,在shell脚本中,使用(cmd)可以让fork一个子shell来执行该命令。利用这两点,可以实现shell的多线程:job_num=10functiondo_work(){ echoDo work..}for((i=0; i<job_num ;i++)); do echoFork job $i (do_work)&donewait #wait for all job doneechoAll job have been done!注意最后的wait命令,作用是等待所有子进程结束。22) bash中alias的使用alias其实是给常用的命令定一个别名,比如很多人会定义一下的一个别名:1aliasll='ls-l'以后就可以使用ll,实际后执行的是ls -l。现在很多发行版都会带几个默认的别名,比如:aliasgrep='grep--color=auto' # 带颜色显示aliasls='ls--color=auto'# 同上aliasrm='rm-i' # 删除文件需要确认alias在某些方面确实提高了很大的效率,但是也是有隐患的,这点可以看我以前的一篇文章终端下肉眼看不见的东西。那么如何不要alias,而是用本来的意思呢?答案是使用转义:12/ls/grep在命令前面加一个反斜杠后就可以了。这里要插一段故事,前两天我在shell脚本中定义了下面的一个alias,假设位于文件util.sh:#!/bin/bash...aliasssh='ssh-o StrictHostKeyChecking=no -o LogLevel=quiet -o BatchMode=yes'...后面这串ssh选项是为了去掉一些warning的信息,不提示输入密码等等。具体可以看ssh的文档说明。我自己测试的时候好好的,当时我同事跑得时候却依然有报Warning。我对比了下我们两个人的用法:12shutil.sh #我的./util.sh #他的大家应该知道,直接./util.sh执行,shell会去找脚本第一行的shebang中给定的解释器去执行改脚本,所以第二种用法相当于直接用bash来执行。那想必是bash/sh对alias是否默认这一点上是有区别的了(可能是bash版本的问题,RHEL 5U4)。翻阅了下Bash的man手册,发现可以通过设置expand_aliases选项来打开alias的功能,默认在非交互式Shell下是关闭的(什么是交互式登录Shell)。修改下util.sh,打开这个选项就Ok了:#!/bin/bash...#Expand aliases in scriptshopt-s expand_aliasesaliasssh='ssh-o StrictHostKeyChecking=no -o LogLevel=quiet -o BatchMode=yes'...23)awk打印除第一列之外的其他列awk用来截取输入行中的某几列很有用,当时如果要排除某几列呢?例如有如下的一个文件:$cat/tmp/test.txt12 3 4 51020 30 40 50可以用下面的代码解决(来源):123$awk'{$1=;print $0}'/tmp/test.txt23 4 52030 40 50但是前面多了一个空格,可以用cut命令稍微调整下:123$awk'{$1=;print $0}'/tmp/test.txt cut-c2-23 4 52030 40 50附几则小技巧:1)sudo iptables -L -n vim -2)grep -v xxx vim -3)echo $’/4)set — 1 2 3; echo $@5)搜索stackoverflow/superuser等站点

热点内容
c服务编译耗时优化原理及实例 发布:2024-05-03 15:35:26 浏览:15
ue编程 发布:2024-05-03 15:34:40 浏览:610
经典的c语言程序 发布:2024-05-03 15:03:24 浏览:859
工程加密网 发布:2024-05-03 14:59:55 浏览:292
吃冰球解压 发布:2024-05-03 14:59:10 浏览:895
编译芯片发烫 发布:2024-05-03 14:59:05 浏览:549
优化算法pdf 发布:2024-05-03 14:18:10 浏览:291
python算法书 发布:2024-05-03 14:14:25 浏览:736
方舟怎么加入服务器闪退 发布:2024-05-03 14:05:27 浏览:491
安卓心跳怎么打出来 发布:2024-05-03 13:59:23 浏览:100