shell下if命令中-a~-z意思
Shell脚本技巧

Shell脚本技巧1.test测试命令test命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试,其测试符和相应的功能分别如下:(1)数值测试:-eq:等于则为真-ne:不等于则为真-gt:大于则为真-ge:大于等于则为真-lt:小于则为真-le:小于等于则为真(2)字符串测试:=:等于则为真!=:不相等则为真-z 字符串:字符串长度伪则为真-n 字符串:字符串长度不伪则为真(3)文件测试:-e 文件名:如果文件存在则为真-r 文件名:如果文件存在且可读则为真-w 文件名:如果文件存在且可写则为真-x 文件名:如果文件存在且可执行则为真-s 文件名:如果文件存在且至少有一个字符则为真-d 文件名:如果文件存在且为目录则为真-f 文件名:如果文件存在且为普通文件则为真-c 文件名:如果文件存在且为字符型特殊文件则为真-b 文件名:如果文件存在且为块特殊文件则为真另外,Linux还提供了与(“!”)、或(“-o)、非(“-a”)三个逻辑操作符用于将测试条件连接起来,其优先级为:“!”最高,“-a”次之,“-o”最低。
同时,bash也能完成简单的算术运算,格式如下:$[expression]例如:var1=2var2=$[var1*10+1]则:var2的值为21。
2.if条件语句if [ -x /sbin/quotaon ]; thenecho "Turning on Quota for root filesystem"/sbin/quotaon /elif [ -x /sbin/quotaon ]; then/usr/bin/bashelseecho "ok"fi3.for 循环#!/bin/shWORD="a b c d e f g h i j l m n o p q r s t u v w x y z"for i in $WORD ; doecho $idone#!/bin/shFILES=`ls /txt/*.txt`for txt in $FILES ; dodoc=`echo $txt | sed "s/.txt/.doc/"`mv $txt $docdone4.while和until 循环#!/bin/shwhile [ -f /var/run/ppp0.pid ] ; dokillall pppddone#!/bin/shuntil [ -f /var/run/ppp0.pid ] ; dosleep 1doneShell还提供了true和false两条命令用于建立无限循环结构的需要,它们的返回状态分别是总为0或总为非05.case 条件选择#!/bin/shcase $1 instart | begin)echo "start something";;stop | end)echo "stop something";;*)echo "Ignorant";;esaccase表达式中也可以使用shell的通配符(“*”、“?”、“[ ]”)。
Linuxshellif[-n]正确使用方法
![Linuxshellif[-n]正确使用方法](https://img.taocdn.com/s3/m/aaa525a4dc3383c4bb4cf7ec4afe04a1b071b083.png)
Linuxshellif[-n]正 确 使 用 方 法
if [ str1 = str2 ] 当两个串有相同内容、长度时为真 if [ str1 != str2 ] 当串str1和str2不等时为真 if [ -n str1 ] 当串的长度大于0时为真(串非空) if [ -z str1 ] 当串的长度为0时为真(空串) if [ str1 ] 当串str1为非空时为真 shell 中利用 -n 来判定字符串非空。 错误用法: ARGS=$* if [ -n $ARGS ] then
print "with argument" fi print " without argument" 不管传不传参数,总会进入if里面。 原因:因为不加“”时该if语句等效于if [ -n ],shell 会把它当成if [ str1 ]来处理,-n自然不为空,所以为正。
正确用法:需要在$ARGS上加入双引号,即"$ARGS".
ARGS=$* if [ -n "$ARGS" ] then
print "with argument"gument"
在Shell脚本中使用配置文件的高级技巧

在Shell脚本中使用配置文件的高级技巧在编写Shell脚本时,使用配置文件是一种常见的方式,它可以让我们将脚本中的一些参数与变量抽离出来,使得脚本更具可读性和可维护性。
本文将介绍一些在Shell脚本中使用配置文件的高级技巧,帮助读者更好地掌握这一技术。
一、选择合适的配置文件格式在使用配置文件之前,我们需要选择一个合适的配置文件格式。
常见的配置文件格式有ini、properties和yaml等。
根据具体需求,我们可以选择最适合自己项目的配置文件格式。
以ini格式为例,一个典型的配置文件如下:```[section1]key1=value1key2=value2[section2]key3=value3key4=value4```二、读取配置文件在Shell脚本中,我们可以使用多种方式来读取配置文件。
以下是其中两种常见的方式:1. 使用grep和awk命令来提取配置项的值:```shellconfig_file="config.ini"section="section1"key="key1"value=$(grep -A9999 "^\[$section\]" $config_file | grep "$key" | awk -F= '{print $2}')```以上命令先通过grep来定位到配置项所在的部分,然后再使用awk 来提取具体的配置值。
2. 使用source命令来导入配置文件并直接获取配置项的值:```shellconfig_file="config.ini"source $config_filevalue=$key1```以上命令通过source命令来直接导入配置文件,并将配置项的值赋给对应的变量。
三、增加配置文件的灵活性除了简单地读取配置文件外,我们还可以通过一些技巧来增加配置文件的灵活性。
shell编程中的表达式(-d,-f,-L等)

shell编程中的表达式(-d,-f,-L等)1. ⽂件表达式-e filename 如果 filename存在,则为真-d filename 如果 filename为⽬录,则为真-f filename 如果 filename为常规⽂件,则为真-L filename 如果 filename为符号链接,则为真-r filename 如果 filename可读,则为真-w filename 如果 filename可写,则为真-x filename 如果 filename可执⾏,则为真-s filename 如果⽂件长度不为0,则为真-h filename 如果⽂件是软链接,则为真filename1 -nt filename2 如果 filename1⽐ filename2新,则为真。
filename1 -ot filename2 如果 filename1⽐ filename2旧,则为真。
2. 字符串变量表达式If [ $a = $b ] 如果string1等于string2,则为真字符串允许使⽤赋值号做等号if [ $string1 != $string2 ] 如果string1不等于string2,则为真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 ]。
shell压缩文件夹的命令

shell压缩文件夹的命令
Shell压缩文件夹的命令可以帮助我们快速地将一个文件夹压缩成一个压缩包,从而方便传输和存储。
下面是几种常见的Shell压缩文件夹的命令:
1. tar命令:tar命令是一个非常常见的Shell压缩命令,可以将多个文件或者文件夹打包成一个文件,并进行压缩。
例如,将文件夹test压缩成一个tar.gz压缩包,可以使用以下命令:
tar -zcvf test.tar.gz test/
其中,-z表示使用gzip进行压缩,-c表示创建一个新的压缩文件,-v表示显示压缩进度,-f表示指定压缩文件名。
2. zip命令:zip命令也是一个常用的Shell压缩命令,可以将一个或多个文件或文件夹压缩成一个zip文件。
例如,将文件夹test 压缩成一个test.zip压缩包,可以使用以下命令:
zip -r test.zip test/
其中,-r表示递归压缩子文件夹,test/表示要压缩的文件夹路径。
3. rar命令:rar命令是一个商业压缩软件,但也可以在Shell 中使用。
例如,将文件夹test压缩成一个test.rar压缩包,可以使用以下命令:
rar a test.rar test/
其中,a表示添加文件到压缩包中,test/表示要压缩的文件夹路径。
以上是几种常见的Shell压缩文件夹的命令,可以根据自己的需求选择合适的命令进行使用。
常用shell脚本指令

常用shell脚本命令1、显示包含文字aaa的下一行的内容:sed -n '/aaa/{n;p;}' filename2、删除当前行与下一行的内容:sed -i '/aaa/{N;d;}' filename3、删除当前行与下两行的内容:sed -i '/aaa/{N;N;d;}' filename依次类推,删除三行,则为{N;N;N;d;},分析知:N为next4、得出以空格为分割的字符串中单词的个数,即统计个数:awk ' { print NF } '如显示字符串VALUE中的单词个数,其中VALUE为:aaa bbb ccc ddd ee f则执行 echo $VALUE | awk ' { print NF } ' 后的结果为65、在linux中建立一个文件与另一文件的链接,即符号链接ln -s /var/named/chroot/etc/named.conf named.conf这要就建立了当前目录的文件named.conf对/var/named/chroot/etc/named.conf 的符号链接。
即操作named.conf就意味着操作实际文件/var/named/chroot/etc/named.conf ,这时用ll命令查看的结果如:lrwxrwxrwx 1 root root 32 Mar 22 12:29 named.conf ->/var/named/chroot/etc/named.conf注意:当用sed来通过named.conf来删除一部分信息时,会将符号链接的关系丢掉,即会将named.conf变成一个实际文件。
所以需对实际文件进行删除操作。
6、显示指定字符范围内的内容:如:显示文件test.txt中字符#test begin与#test end之间所有的字符sed -n "/#test begin/,/#test end/p" test.txt或 awk "/#test begin/,/#test end/" test.txt在日常系统管理工作中,需要编写脚本来完成特定的功能,编写shell脚本是一个基本功了!在编写的过程中,掌握一些常用的技巧和语法就可以完成大部分功能了,也就是2/8原则.1. 单引号和双引号的区别单引号与双引号的最大不同在于双引号仍然可以引用变量的内容,但单引号内仅是普通字符,不会作变量的引用,直接输出字符窜。
shell中感叹号的用法
shell中感叹号的用法
在shell编程中,感叹号常常用来表示'非'。
在if语句中,感叹号可以用来判断一个变量是否为空,例如:
```
if [ ! -z $var ]; then
echo '变量 $var 不为空'
fi
```
这里的'! -z'表示如果$var不为空,也就是非空,就执行后面的语句。
另外,感叹号还可以用来执行历史命令。
在命令行中输入'!'加上一个数字,就会执行该数字对应的历史命令。
例如,输入'!10'会执行第10个历史命令。
如果在感叹号后面加上'-',表示执行上一次命令的参数,例如:
```
$ mkdir test
$ cd !
```
这里的'!'表示上一次命令的参数,也就是test,所以cd命令会进入test目录。
总之,在shell中,感叹号是一个非常有用的字符,可以用来表示'非'、执行历史命令等。
- 1 -。
实用技巧在Shell脚本中使用条件判断处理空白字符情况
实用技巧在Shell脚本中使用条件判断处理空白字符情况在Shell脚本编写过程中,经常会需要对变量进行条件判断,以处理不同的情况。
而在处理空白字符的情况下,我们可以借助一些实用技巧来实现有效的条件判断。
本文将介绍几种实用技巧,以帮助你在Shell脚本中高效地处理空白字符情况。
一、使用双引号来包含变量在Shell脚本中,如果需要将变量嵌入到字符串中,可以使用双引号将变量包含起来。
这样可以保留变量中的空白字符,并将其作为字符串的一部分。
例如,假设有一个变量`name="John Doe"`,我们可以通过以下方式将其嵌入到字符串中:```shellecho "Hello, $name!"```输出结果为:```Hello, John Doe!```通过使用双引号,我们可以将变量`name`中的空白字符保留下来,并且正确地输出了包含空白字符的字符串。
二、使用条件判断语句当需要判断一个变量是否为空白字符时,可以利用Shell脚本提供的条件判断语句,如`if`语句。
在`if`语句中,可以使用`-z`选项来判断一个变量是否为空。
```shellif [ -z "$name" ]; thenecho "The variable is empty."elseecho "The variable is not empty."fi```通过以上代码,我们可以根据变量`name`是否为空,输出不同的提示信息。
三、使用`trim`函数移除空白字符在处理空白字符情况时,有时候我们需要先移除变量中的空白字符,再进行其他操作。
这时可以定义一个`trim`函数来移除变量中的空白字符。
```shelltrim() {local var=$1var="${var#"${var%%[![:space:]]*}"}"var="${var%"${var##*[![:space:]]}"}"echo -n "$var"}```通过以上代码,我们定义了一个`trim`函数来移除变量中的空白字符。
shell中的for、while循环及if语句
shell中的for、while循环及if语句shell与其他语⾔⼀样也⽀持for、while循环for循环的⼀般格式如下:1 #!/bin/sh23for变量in列表4do5 command 16 command 27 command 18 .........9 command n10done列表是⼀组值(数字、字符串等)组成的序列,每个值通过空格分隔。
每循环⼀次,就将列表中的下⼀个值赋给变量。
列表也可以是⼀个⽂件:in 列表是可选的,如果不⽤它,for 循环使⽤命令⾏的位置参数。
1 #!/bin/sh23for line in12345674do5echo"line is $line"6done结果:[root@localhost 1st]# sh test.shline is 1line is 2line is 3line is 4line is 5line is 6line is 7下⾯⽤for循环读⼀个⽂件:查看⽂件内容1 [root@localhost 1st]# cat test.txt2 hello3 wolrd4 hello5 shell6 [root@localhost 1st]#code:1 #!/bin/sh23 FILE=./test.txt45for line in $(<$FILE)6do7echo"line is: $line"8doneResults:1 [root@localhost 1st]# sh xx.sh2 line is: hello3 line is: wolrd4 line is: hello5 line is: shell6 [root@localhost 1st]#while循环的⼀般格式如下:1while command2do34 statement56done3 i=04sum=05while [ $i -le 100 ]6do7sum=$(($sum + $i))8 i=$(($i + 1))9done10echo"sum is $sum"rusults:1 [root@localhost 1st]# sh xx.sh2sum is 50503 [root@localhost 1st]#if语句的⼀般格式如下:1if ....; then2 ....3elif ....; then4 ....5else6 ....7fiif 条件语句:⽂件表达式:1 [ -f "somefile" ] : 判断是否是⼀个⽂件2 [ -x "/bin/ls" ] : 判断/bin/ls是否存在并有可执⾏权限3 [ -n "$var" ] : 判断$var变量是否有值4 [ "$a" = "$b" ] : 判断$a和$b是否相等5 -r file ⽤户可读为真6 -w file ⽤户可写为真7 -x file ⽤户可执⾏为真8 -f file ⽂件为正规⽂件为真9 -d file ⽂件为⽬录为真10 -c file ⽂件为字符特殊⽂件为真11 -b file ⽂件为块特殊⽂件为真12 -s file ⽂件⼤⼩⾮0时为真13 -t file 当⽂件描述符(默认为1)指定的设备为终端时为真字符串表达式:[string string_operator string]这⾥string_operator可为如下⼏种:1 = 两个字符串相等。
shell括号的用法
shell括号的用法
在Shell编程中,括号有多种用法,用于不同的目的。
以下是一些常见的括号用法:
1.圆括号():
-命令替换:使用$()或``将命令嵌套在圆括号中,将命令的输出结果赋值给变量,例如:`result=$(command)`
-数学运算:将数学运算表达式放在圆括号中进行计算,例如:`sum=$((a+b))`
2.方括号[]:
-条件测试:用于条件测试,例如在if语句中:`if[condition]`
-数组索引:用于访问数组元素,例如:`array[0]`
3.花括号{}:
-扩展模式:用于文件名扩展或字符串扩展,例如:`cp file{1,2,3}.txt destination`
-字符范围:用于表示字符范围,例如:`echo{a..z}`
-命令块:用于定义命令块,例如:`{command1;command2;}`
需要注意的是,不同的括号用法具有不同的语法和语义,正确使用括号是确保Shell脚本正确执行的关键。
具体用法还取决于您的脚本需求和目标。
请参考Shell编程的相关文档或参考资料以获取更详细的信息和示例。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
喵~~~
shell中条件判断if中的-a到-z的意思
[ -a FILE ] 如果 FILE 存在则为真。
[ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。
[ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。
[ -d FILE ] 如果 FILE 存在且是一个目录则为真。
[ -e FILE ] 如果 FILE 存在则为真。
[ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。
[ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真。
[ -h FILE ] 如果 FILE 存在且是一个符号连接则为真。
[ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真。
[ -p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真。
[ -r FILE ] 如果 FILE 存在且是可读的则为真。
[ -s FILE ] 如果 FILE 存在且大小不为0则为真。
[ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真。
[ -u FILE ] 如果 FILE 存在且设置了SUID (set user ID)则为真。
[ -w FILE ] 如果 FILE 如果 FILE 存在且是可写的则为真。
[ -x FILE ] 如果 FILE 存在且是可执行的则为真。
[ -O FILE ] 如果 FILE 存在且属有效用户ID则为真。
[ -G FILE ] 如果 FILE 存在且属有效用户组则为真。
[ -L FILE ] 如果 FILE 存在且是一个符号连接则为真。
[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read则为真。
[ -S FILE ] 如果 FILE 存在且是一个套接字则为真。
[ FILE1 -nt FILE2 ] 如果 FILE1 has been changed more recently than FILE2,
or 如果 FILE1 exists and FILE2 does not则为真。
[ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真。
[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和节点号则为真。
[ -o OPTIONNAME ] 如果 shell选项“OPTIONNAME”开启则为真。
[ -z STRING ] “STRING”的长度为零则为真。
[ -n STRING ] or [ STRING ] “STRING”的长度为非零 non-zero则为真。
[ STRING1 == STRING2 ] 如果2个字符串相同。
“=” may be used instead of “==” for strict POSIX compliance则为真。
[ STRING1 != STRING2 ] 如果字符串不相等则为真。
[ STRING1 < STRING2 ]
如果“STRING1” sorts before “STRING2” lexicographically in the current locale则为真。
[ STRING1 > STRING2 ]
如果“STRING1” sorts after “STRING2” lexicographically in the current locale则为真。
[ ARG1 OP ARG2 ] “OP” is one of -eq, -ne, -lt, -le, -gt or -ge. These arithmetic binary operators ret urn true if “ARG1” is equal to, not equal to, less than, less than or equal to, greater than, or greate r than or equal to “ARG2”, respectively. “ARG1” and “ARG2” are integers.。