shell脚本ifthen
① shell 中 if[X$1 = X];then 什么意思
if[x$1 = x];中$1表示运行shell时传的第一个参数。
即:如果有一个shell文件名为test.sh那么运行命令为
./test.sh a b
其中a为第一个参数b为第二个参数$1就代表的是a这个字母。
在if[x$1 = x];中实际就会判断 xa = x
这样写的主要目的是当如果写成["$1" = "$2" ] 在 $1,$2为空时会在某些bash版本中出现编译错误所以运用了shell中的字符抵消原则。
说简单点就是一种规则,你看代码不管X就行。
② 如何使用shell 脚本语法书写 if 分支语句
和C语言类似,在Shell中也可以实现分支语句。用if、then、elif、else、fi这几条命令实现分支控制。这种流程控制语句本质上也是由若干条Shell命令组成的,例如:
?#! /bin/sh
??
?if [ -f ~/.bashrc ]; then
? . ~/.bashrc
?fi
目前在黑马程序员学习C/C++,还不会用,然后在社区查了一下,分享给你,如果你有什么不了解的,也可以去查一下,看一看啊
③ 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而使用&& ||。
④ shell脚本if then else的问题
问题出在echo("true")或者echo("false")这一句,ftp里面不支持,你手动执行一下就知道了。
ftp>echo("true")
?Invalidcommand
ftp>help
Commandsmaybeabbreviated.Commandsare:
! debug mdir sendport site
$ dir mget put size
account disconnect mkdir pwd status
append exit mls quit struct
ascii form mode quote system
bell get modtime recv sunique
binary glob mput reget tenex
bye hash newer rstatus tick
case help nmap rhelp trace
cd idle nlist rename type
cp image ntrans reset user
chmod lcd open restart umask
close ls prompt rmdir verbose
cr macdef passive runique ?
delete mdelete proxy send
⑤ 在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
⑥ 在SHELL脚本里看到 if [ $# -lt 1 ]; then ,$#是什么意思
是表示调用这个脚本时提供的参数个数。
这句话是指,当调用该脚本没有提供参数时该如何处理
⑦ 如何将if then fi 写成一行shell
这种写法在shell里叫参数替换
$1是行参变量,也就是脚本执行时的第一个参数。
${1:-NULL}意思是当$1为空时,自动将NULL替换成$1所要带入的变量值。
以下引用ABS里的一段话
${parameter:-default} -- 如果变量parameter没被设置, 那么就使用默认值.
⑧ shell if then 总是报错
变量前后各留一个空格
例如:
if [ $a -eq $b ];then或者if (($a==$b));then
⑨ 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 匹配出行 在打印出这些行的第一段内容 )
⑩ shell脚本中: if [ -f /FileA -a -O /FileB ]; then 语句中判断条件怎么理解,逻辑关系是什么
-a是and,左右条件两者都成立
-o是or,左右条件任意一条成立
