# x=*
# echo $x
hello.sh menus.sh misc.sh phonebook tshift.sh
# echo '$x'
$x
# echo "$x"
*
这个例子可以看出无引号、单引号和双引号之间的区别。在最后一种情况中,双引号告诉shell在引号内照样进行变量名替换,所以shell把$x替换为*,因为双引号中不做文件名替换,所以就把*作为要显示的值传递给echo。 对于第一种情况需要进一步说明,shell在给变量赋值时不进行文件名替换(这从第三种情况中也能看出来),各步骤发生的精确次序如下: shell扫描命令行,把x的值设为星号*;
shell再次扫描命令行,碰到星号*,把它替换成当前目录下的文件清单;
shell启动执行echo命令,把文件清单作为参数传递给echo.
这个赋值的先后次序非常重要:shell先作变量替换,然后作文件名替换,最后把这行处理为参数
单引号和双引号都能关闭shell对特殊字符的处理。不同的是,双引号没有单引号严格,单引号关闭所有有特殊作用的字符,而双引号只要求shell忽略大多数,具体的说,就是①美元符号②反引号③反斜杠,这3种特殊字符不被忽略。 不忽略美元符号意味着shell在双引号内部也进行变量名替换。
双引号可有可无;单引号主要用在原样输出中。
TWO=2;
echo ${TWO}nd
if [ -d "c:/" ]; then REMOTE_SERVER_TYPE="WINDOWS"; else REMOTE_SERVER_TYPE="UNIX"; fi
if [ $REMOTE_SERVER_TYPE = 'WINDOWS' ]; then echo Windowss; else echo heheh; fi
if [ "WINDOWS" = 'WINDOWS' ]; then echo Windows1; else echo heheh; fi
if [ "WINDOWS" = $REMOTE_SERVER_TYPE ]; then echo Windows2; else echo heheh; fi
if [ WINDOWS = $REMOTE_SERVER_TYPE ]; then echo Windows2; else echo heheh; fi
练习的小内容:
判断当前文件夹下是否存在a.txt文件,若存在则新建a-1.txt文件;否则创建t.txt文件;
if 的三种条件表达式
1、
if 条件一;then
command1
else
command2
fi
code:
1 #!/bin/bash
2
3 if ls|grep a.txt; then
4 touch a-1.txt
5 else
6 touch t.txt
7 fi
Loong:/home/yee/if# ls
if-1.sh if-2.sh
Loong:/home/yee/if# sh -x if-1.sh
+ ls
+ grep a.txt
+ touch t.txt
Loong:/home/yee/if# ls
if-1.sh if-2.sh t.txt
Loong:/home/yee/if# touch a.txt
Loong:/home/yee/if# ls
a.txt if-1.sh if-2.sh t.txt
Loong:/home/yee/if# sh -x if-1.sh
+ ls
+ grep a.txt
a.txt
+ touch a-1.txt
Loong:/home/yee/if#
2、
if [表达式];then if与【】间要留空格,否则报错;
command1
fi 分号 ;不能少,否则报错:syntax error: unexpected end of file ;不要分号则then 换行写;
更复杂的情况,则可以使用这个语法:
if [ 条件判断式一 ]; then
当条件判断式一成立时,可以进行的指令工作内容;
elif [ 条件判断式二 ]; then
当条件判断式二成立时,可以进行的指令工作内容;
else
当条件判断式一与二均不成立时,可以进行的指令工作内容;
fi
文件表达式
条件表达式
if [ -f file] 如果文件存在
if [ -d... ] 如果目录存在
if [ -s file ] 如果文件存在且非空
if [ -r file ] 如果文件存在且可读
if [ -w file ] 如果文件存在且可写
if [ -x file ] 如果文件存在且可执行
if [ -e dir||file] 如果指定的文件或者目录存在返回真
[ -z STRING ] 如果STRING的长度为零则为真
[ -n STRING ] 如果STRING的长度非零则为真
[ STRING1 = STRING2 ] 如果两个字符串相同则为真
[ STRING1 != STRING2 ] 如果字符串不相同则为真
整数变量表达式
if [ int1 -eq int2] 如果int1等于int2
-eq -ne -lt -nt只能用于整数,不适用于字符串,字符串等于用赋值号=
if [ int1 -ne int2] 如果不等于
if [ int1 -ge int2] 如果>= 整数条件表达式,大于,小于,shell里没有> 和<,会被当作尖括号,只有-ge,-gt,-le,lt
if [ int1 -gt int2] 如果>
if [ int1 -le int2] 如果<=
if [ int1 -lt int2] 如果<
字符串变量表达式
If [ $a = $b] 如果string1等于string2 条件表达式引用变量要带$,比较$a和$b,而不是比较a和b
字符串允许使用赋值号做等号
if [ $string1 != $string2] 如果string1不等于string2 =放在别的地方是赋值,放在if [ ]里就是字符串等于, =作为等于时,其两边都必须加空格,否则失效
if [ -n$string ] 如果string 非空(非0),返回0(true)
if [ -z $string ] 如果string 为空
if [ $sting] 如果string非空,返回0 (和-n类似)
逻辑非! 条件表达式的相反
if [ ! 表达式 ]
if [ ! -d $num] 如果不存在目录$num
逻辑与–a 条件表达式的并列
if [ 表达式1 –a 表达式2 ]
逻辑或-o 条件表达式的或
if [ 表达式1 –o 表达式2 ]
逻辑表达式
表达式与前面的= != -d –f –x -ne -eq -lt等合用
逻辑符号就正常的接其他表达式,没有任何括号( ),就是并列
if [ -z "$JHHOME" -a -d $HOME/
注意逻辑与-a与逻辑或-o很容易和其他字符串或文件的运算符号搞混
code:
#!/bin/bash
filename=/home/yee/if/a.txt
if [ -f $filename ]; then
touch a-1.txt
fi
if [ ! -e $filename ]; then
touch t.txt
fi
Loong:/home/yee/if# ll
总计 12
-rw-r--r-- 1 root root 75 11-07 11:42 if-1.sh
-rw-r--r-- 1 root root 130 11-07 16:08 if-2.sh
-rw-r--r-- 1 root root 38 11-07 14:21 if-3.sh
Loong:/home/yee/if# sh -x if-2.sh
+ filename=/home/yee/if/a.txt
+ '[' -f /home/yee/if/a.txt ']'
+ '[' '!' -e /home/yee/if/a.txt ']'
+ touch t.txt
Loong:/home/yee/if# ll
总计 12
-rw-r--r-- 1 root root 75 11-07 11:42 if-1.sh
-rw-r--r-- 1 root root 130 11-07 16:08 if-2.sh
-rw-r--r-- 1 root root 38 11-07 14:21 if-3.sh
-rw-r--r-- 1 root root 0 11-07 16:11 t.txt
Loong:/home/yee/if#
3、
if test 表达式 ;then
command1
fi
例:
if test $num -eq0 等价于 if [ $num –eq 0]
test 表达式,没有 [ ]
[plain] view plaincopy
1 #!/bin/bash
2
3 filename=/home/yee/if/a.txt
4 if test -f $filename
5 then
6 touch a-1.txt
7 else
8 touch t.txt
9 fi
[plain] view plaincopy
Loong:/home/yee/if# ll
总计 12
-rw-r--r-- 1 root root 75 11-07 11:42 if-1.sh
-rw-r--r-- 1 root root 130 11-07 16:08 if-2.sh
-rw-r--r-- 1 root root 38 11-07 14:21 if-3.sh
-rw-r--r-- 1 root root 0 11-07 <span style="color:#FF0000;">16:11</span> t.txt
Loong:/home/yee/if# sh -x if-3.sh
+ filename=/home/yee/if/a.txt
+ test -f /home/yee/if/a.txt
+ touch t.txt
Loong:/home/yee/if# ll
总计 12
-rw-r--r-- 1 root root 75 11-07 11:42 if-1.sh
-rw-r--r-- 1 root root 130 11-07 16:08 if-2.sh
-rw-r--r-- 1 root root 103 11-07 16:20 if-3.sh
-rw-r--r-- 1 root root 0 11-07 <span style="color:#FF0000;">16:20 </span>t.txt
Loong:/home/yee/if# touch a.txt
Loong:/home/yee/if# sh -x if-3.sh
+ filename=/home/yee/if/a.txt
+ test -f /home/yee/if/a.txt
+ touch a-1.txt
Loong:/home/yee/if# ll
总计 12
-rw-r--r-- 1 root root 0 11-07 16:21 a-1.txt
-rw-r--r-- 1 root root 0 11-07 16:21 a.txt
-rw-r--r-- 1 root root 75 11-07 11:42 if-1.sh
-rw-r--r-- 1 root root 130 11-07 16:08 if-2.sh
-rw-r--r-- 1 root root 103 11-07 16:20 if-3.sh
-rw-r--r-- 1 root root 0 11-07 16:20 t.txt
Loong:/home/yee/if#
echo -e参数使输出中的反斜线(\)的说明起作用
echo -n参数使引号后的内容接着输出(不换行)
分享到:
相关推荐
笔记note 是一个用于存储、检索和搜索笔记的程序。 note 可以接受来自 stdin 或$VISUAL定义的编辑器的输入。安装 curl --silent -G https://raw.github.com/nuex/note/master/note -o ~/bin/notechmod +x ~/bin/note...
13.2 函数语法函数有两种语法:第一种语法函数名(){代码块第二种语法function 函数名{代码块定义函数return 0 # 返回一个值,可写可不写调用
安卓终端模拟器,绿色无广告,最好用的android shell This is the final version that includes support for Android 1.5 "Cupcake": Term-1.0.65.apk Note: This application used to be named "Android Terminal ...
shell命令setx 设置环境变量设置用户环境变量 -- setx ENV_NAME env_valuecd 切换目录/d -- 支持切换磁盘分区cd /d
本项目是一款综合性的学习笔记仓库,采用HTML、Java、C、Shell、CSS和JavaScript等多语言构建,共计包含655个文件。其中,包含292个Markdown笔记、153个HTML页面、143个PNG图片、23个Java源代码文件、11个C语言源...
Linux使用的一些笔记,包括shell命令,软件,一些实用的网站的整理_Linux_note
/bin/bash#********************************##并发后台运行fun ##for wanggy 2012-01-25 ##note: ##fun_num fun函数后台运行次数 ##sql_num 每个函数sql运行次数 ##********************************##数据库...
# NOTE: To output the timing to a file use the following syntax: # 12_ways_to_parse.ksh file_to_process > output_file_name 2>&1 # The actual timing data is sent to standard error, file descriptor (2),...
/home/xyz note Notice ``` 这里,`$HOME`环境变量的值和`ls [nN]*`命令的输出结果都被包含在`TestString`变量中。 #### 二、标准输入/输出与重定向 在Linux中,标准输入、标准输出和标准错误是非常重要的概念,...
一个简单的shell脚本,用于管理您的随机每日笔记。 每次您运行note.sh它都会打开当天的Markdown文件。 例如,如果今天是2020年12月2日,它将在notes目录中创建一个名为2020-12-02.md的Markdown文件。 该脚本受到极...
Shell脚本是Linux或Unix操作系统中用于自动化任务的文本文件,它包含了一系列的命令,可以按顺序执行。本文档是对Shell脚本编写的总结,涵盖了重定向、管道、变量、循环以及日志处理等多个关键概念。 1. **文件...
1. 单引号 2. 双引号 3. 拼接字符串 4. 获取字符串长度 5. 提取子字符串 6. 查找子字符串
不管你会c,c++,java或是其它的,你至少得会一种shell编程
1. 数值测试 2. 字符串测试 3. 文件测试
@note:如果想要知道如何编执行脚本,请看我另一篇文章 如何执行shell脚本 如何编写一个shell脚本 脚本无法保存怎么办 一些个人的经历跟看法 编写sh脚本 首先我要说明一下,这个地方我用的是Mac系统,所以windows的...
在Unix-like系统中,shell脚本或C程序的退出状态码是一个重要的通信方式,它用于指示程序执行的成功或失败情况。通常,一个程序的退出状态码是一个0到255之间的整数,其中0表示成功,非零值表示错误。在特定的上下...
1.1 显示普通字符串 1.2 显示转义字符 1.3 显示变量 1.4 显示换行 1.5 显示不换行 1.6 显示结果定向至文件 1.7 原样输出字符串,不进行
下面的脚本提示输入1到4,与每一种模式进行匹配:echo '输入 1 到 4 之间的数字:'echo '你输入的数字为:'1) echo '你选择了 1'2)
~ 使用者家目录(文件名没事不要用这符号)$ 取用变量前导符& 命令后台工作/ 目录符号> 数据流导向,输出,“替换”>> 数据流导向,输出,“累加”数据流
综上所述,"MyNote"是一个综合性的个人学习资源库,涵盖了从基础编程语言(Python、Go、C++)到版本控制(Git)、开发工具(Vim、VSCode)、系统操作(Shell、Linux Shell)、通信技术(SIP、WebRTC)、容器化...