1. 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而使用&& ||。
2. shell 脚本 if 的用法小问题
1. 执行shell脚本的时候加上 -x ,执行脚本时会把过程列出来!(有利于我这种新手学习)sh -x shell (./shell 也可以执行shell脚本 但是没有-x参数)2. 传的值的个数大于 read 定义的接受变量的时候会把多余的值都给最后一个变量!!3. expr 对整数型变量进行运算 如果运算结果不是整数小数点后面的全部省去 (乘号要用转意字符'/') .4. 在shell脚本里面 执行一条输出的命令(pgrep mysqld)怎么吧输出的结果作为值赋给变量?web=$(/usr/bin/pgrep mysqld) #可以用 变量=$(命令) 和 变量=`命令` 来吧命令执行的结果赋给变量
if [ $web = ]
then
/etc/init.d/mysql start
fi
5.查看某个命令所在的位置可以用 whereis /which/type 三个命令来查看6.awk命令的应用作用:分段提取! (一行为单位来进行分段)awk -F [分隔符] '条件 动作' /对象例: awk -F : '$3==0 {print $1}' /etc/passwd例: awk -F : '$1 == root {print $1} ' /etc/passwd# -F : 用:分割passwd每行的内容 ($1 指第一段内容 $2 指第二段内容$n 指第n段内容)# ' 匹配 动作' 单引号里面写的是 匹配命令和打印动作 匹配$3==0 第三段等于0 打印{print $1} 打印第一段内容 ($3 == 0 匹配出行 在打印出这些行的第一段内容 )
3. shell脚本 if判断条件问题
你既然已经知道这个文件叫什么就没有意义了。。。。理论上应该用find命令或者你知道这个目录在系统中的什么位置。
比如
ls | grep aaa
a=`echo $?`
b=`ls | grep aaa`
if [ $a -eq 0 ]
then
tar zcvf Name.tar.gz $b
else
echo 'Don't have this file.'
fi
4. 关于shell 中的if 逻辑表达式。
if expression
then
commands
fi
这是if其中的一种结构,在结构中就能看到if 后面接的是什么。
这个后边描述的是你想要干什么,根据你的需要去描述出来然后进行下一步的操作
这个并不是固定的。你还是看书吧。。书上写的比这里回答的人描述的详细。
if和then的语法 如果if和then处在同一行 中间需要用;隔开,如果不在同一行可以不用写
if grep "file " /tmp/tmp.txt ;then 这属于语法格式,这个是固定的。其实一行内多个命令之间都需要用;号隔开。如果不在同一行就不用考虑。就像你在终端输入命令一样,一行一个命令。一行多跳命令需要用;隔开。。也是这个道理。至于!取反。。!属于操作符 举个例子来说 $A = $B 如果结果匹配 执行 then 不匹配执行else $A != $B !=就是不等 !进行取反操作 如果判断结果匹配 执行then 不匹配执行eslse
哇。。说了好多废话。。我还是强烈建议你仔细看书。。
______________________________________________
1)我还是建议你看书,而且是看对书,我说的这些都是书上有的。
关于[]你不应该理解成test语法才需要 test就是[] []就是test
抛开if不讲 test也可以单独使用 比如test xxx 写成 [xxxx]意思是一样的。
至于里边加的参数,就涉及到你的需求 要干什么 要判断字串?整数?表达式?文件?
跟用test 还是用 []并没有太大关系 举个例子 test $? -le 0 和 [ $? -le 0] 意思是一样的
2)要解释if ! grep "file" /tmp/tmp.txt ; then 首先你要明白系统所设置的操作符。比如= 比如+、-、*、/、这些都是操作符,至于! 属于位操作符, 我下班了。有空聊
5. 在SHELL脚本里看到 if [ $# -lt 7 ]; then ,请高手详细解释
$#取得shell脚本参数个数,
-lt即lessthan,小于,
$0取得脚本名称(包含路径)
若判断参数个数小于7个,则用echo打印正确的使用方法,并用exit退出脚本。
Usage:脚本名称subjectanalysis_diranat_nameanat_dir_namesanlm_denoisednum_scansgcut
后面分别是7个参数。
其实,通常用`basename$0`来去除路径得到纯粹的脚本名,并且在退出脚本时将返回状态置为非0。
if[$#-lt7];
then
echo-e" Usage:`basename$0`subjectanalysis_diranat_nameanat_dir_namesanlm_denoisednum_scansgcut "
exit1
fi
6. shell脚本if循环问题
刚看到,这么写可以实现,代码在linux上测过了:
#!/bin/bash
arr=(10 11 30)
for a in ${arr[*]}
do
ouput_s=$((ouput_s+a))
sum=$((sum+1))
done
echo "$ouput_s"
echo "$sum"
输出:
51
3
7. linux shell if语句中~是什么意思
if为判断语句,判断某个东西是否达到设定的条件。
1,格式为:
if语句格式
if条件
then
Command
else
Command
fi别忘了这个结尾
2,if的三种条件表达式:
ifcommandthen
if函数then命令执行成功,等于返回0(比如grep,找到匹配)执行失败,返回非0(grep,没找到匹配)
if[expression_r_r_r]then表达式结果为真,则返回0,if把0值引向then
iftestexpression_r_r_rthen表达式结果为假,则返回非0,if把非0值引向then
8. 在linux下shell脚本中if中用到or怎么写
linux下shell脚本的逻辑的or用运算符 || 表示,if中用到or的写法实例如下:
a=10
b=20
if[[$a-lt 50||$b-gt 50]]
then
echo"返回 true"
else
echo"返回 false"
fi
其中$a-lt100表示a<50 为真;$b-gt 50 表示b>50为假;真 or 假为真。
所以输出结果为:返回 true
(8)shell脚本if扩展阅读
1、shell中流程控制if基本语法介绍:
if condition
then
command1
command2 ...
commandN
fi
2、shell中的另一个逻辑运算符and (&&)用法实例介绍:
a=10
b=20
if[[$a-lt100&&$b-gt100]]
then
echo"返回 true"
else
echo"返回 false"
fi
输出结果为:返回 false
9. shell脚本的if
_day=`echo `cal $_month $_year`|awk ’{print $NF}’`
这一句嵌套`符号有问题。不信你把这句注释掉看看是不是就没问题了。
两两匹配的原则是就近匹配,即这句会拆分为下面三段:
`echo `
cal $_month $_year
`|awk ’{print $NF}’`
这显然不是你预期的。
建议:
1)在需要多层嵌套的情况下,最好不要用``,用它的替代品$()。
2)多层嵌套一定要用``的话,里面的`要用反斜杠作跳脱处理(写成\`)。
建议你去看《shell十三问》,搜索一下就能找到,上面专门有写这个。
两种修改方法分别为:
1) _day=$(echo $(cal $_month $_year)|awk '{print $NF}')
2) _day=`echo \`cal $_month $_year\`|awk '{print $NF}'`
10. shell脚本中 if 判断时候-s是什么意思
指的是文件大小非0时为真。