linux+if+判断变量名,Shell变量、判断与循环

1.位置参数(positional parameter):命令行参数

2.export用于将变量放进系统环境里。环境变量是一个名称与值的简单列表,可供所有执行中的程序使用。新的进程会继承父进程的环境变量。

3.export -p:用于显示环境变量。

4.${varname:-word}:如果varname存在且非null,则返回其值,否则,返回word。

5.${varname:=word}:如果varname存在且非null,则返回其值,否则,设置它为word,并返回其值。

6.${varname:?message}:如果varname存在且非null,则返回其值,否则显示varname:message,并退出当前的命令或脚本。

7.${varname:+word}:如果varname存在且非null,返回word,否则返回null。

8.模式匹配运算符实例(注意是模式匹配而非正则表达式匹配):

8.1.path=/home/tolstoy/mem/long.file.name

8.2.1.${variable#pattern}:如果模式匹配于变量值的开头处,则删除匹配的最短部分,并返回剩下的部分。

8.2.2.${path#/*/}:tolstoy/mem/long.file.name

8.3.1.${variable##pattern}:如果模式匹配于变量值的开头处,则删除匹配的最长部分,并返回剩下的部分。

8.3.2.${path##/*/}:long.file.name

8.4.1.${variable%pattern}:如果模式匹配于变量值的结尾处,则删除匹配的最短部分,并返回剩下的部分。

8.4.2.${path%.*}:/home/tolstoy/mem/long.file

8.5.1.${variable%%pattern}:如果模式匹配于变量值的结尾处,则删除匹配的最长部分,并返回剩下的部分。

8.5.2.${path%%.*}:/home/tolstoy/mem/long

9.${#variable}:返回$variable值里的字符长度。

10.$#: 提供传递到Shell脚本或函数的参数总数。

10.1.示例:

while [ $# != 0 ]

do

case $1 in

...

esac

shift #移开第一个参数

done

11.$*,$@:一次表示所有的命令行参数。

12."$*":将所有命令行参数视为单个字符串。$IFS的第一个字符用来作为分割字符,以分隔不同的值来建立字符串。

13."$@":将所有命令行参数视为单独的个体,也就是单独的字符串,这样可以保留内嵌在每个参数里的任何空白。

14.set --:设置位置参数的值,并将之前存在的任何值丢弃。

15.POSIX内置的Shell变量

15.1.#:目前进程的参数个数。

15.2.@:传递给当前进程的的命令行参数。置于双引号内,会展开为个别的参数。

15.3.*:当前进程的命令行参数。置于双引号内,则展开为一单独参数。

15.4.-:在引用时给予Shell的选项。

15.5.?:前一命令的退出状态。

15.6.$:Shell进程的进程编号(process ID)。

15.7.0:Shell程序的名称。

15.8.!:最近一个后台命令的进程编号。

15.9.ENV:一旦引用,则仅用于交互式Shell中;$ENV的值是可展开的参数。

15.10.HOME:家目录。

15.11.IFS:内部的字符分隔器。

15.12.LANG:当前locale的默认名称,其他的LC_*变量会覆盖其值。

15.13.LC_ALL:当前locale的名称;会覆盖LANG和其他LC_*变量。

15.14.LC_COLLATE:用来排序字符的当前locale名称。

15.15.LC_CTYPE:在模式匹配期间,用来确定字符类别的当前locale的名称。

15.16.LC_MESSAGES:输出信息的当前语言的名称。

15.17.LINENO:刚执行过的行在脚本或函数内的行编号。

15.18.PS1:主要的命令提示字符串。默认为“$”。

15.19.PS2:行继续的提示字符串。默认为“>”。

15.20.PS4:以set -x设置的执行跟踪的提示字符串。默认为“+”。

16.特殊变量$$可在编写脚本时用来建立具有唯一性的文件名。

17.算术运算符:

17.1. ++ -- :自增和自减

17.2. + - ! ~:正负号;逻辑与位的取反

17.3. * / %:乘法、除法、取余数

17.4. + -:加法和减法

17.5. << >>:向左位移、向右位移

17.6. < <= > >=:比较

17.7. == !=:相等与不等

17.8. &:位运算的AND

17.9. ^:位运算的Exclusive OR

17.10. |:位运算的OR

17.11. &&:逻辑的AND

17.12. ||:逻辑的OR

17.13. ?::条件表达式

17.14. = += -= *= /= %= &= ^= <<= >>= |=:赋值运算符

18.对于逻辑AND和OR运算符而言,任何非0值函数都为真。

19.Shell算数运算:$((...))

20.每一条命令,不管是内置的、Shell函数、还是外部的,当它退出时,都会返回一个小的整数值给引用它的程序,这就是程序的退出状态。

21.依照惯例,退出状态0表示成功,其它均为失败。

22.if pipeline

[ pipeline ... ]

then

statements-if-true-1

[ elif pipeline

[ pipeline ... ]

then

statements-if-true-2

...]

[ else

statements-if-all-else-fails ]

fi

22.test命令的另一种形式:[ ... ]

23.test表达式

string 判断string是否为null

-b file 判断file是否为块设备文件

-c file 判断file是否为字符设备文件

-d file 判断file是否为目录

-e file 判断file是否存在

-f file 判断file是否为一般文件

-g file -u file 判断file是否设置了它的setid位

-h file -L file 判断file似乎否为符号连接

-n string 判断string是否为null

-p file 判断file是否为一命名的管道

-r file 判断file是否为可读的

-S file 判断file是否为socket

-s file 判断file是否为空

-t n 判断文件描述符n是否指向一个终端

-w file 判断file是否可写

-x file 判断file是否可执行,或file是否为可查找的目录

-z string 如果string为null, 返回真

s1 = s2 字符串s1与s2相同

s1 != s2 字符串s1不等与s2

n1 -eq n2 整数,n1 = n2

n1 -ne n2 整数,n1 != n2

n1 -lt n2 整数,n1 < n2

n1 -gt n2 整数,n1 > n2

n1 -le n2 整数,n1 <= n2

n1 -ge n2 整数,n1 >= n2

24.在test表达式前使用!表示取反。

25.多个test表达式之间可以用-a(AND)和-o(OR)连接。

26.test最佳实践:

26.1.确保test表达式中的变量都用引号括起来,如:if[ -f "$file" ] ...

26.2.如果字符串值为空,或是开头带有一个减号,则test命令会被混淆,所以,可以在字符串前置字母X,如:if [ "X$answer" = "Xyes" ] ...

26.3.test只能处理整数比较,不能处理浮点数比较。

27.case语法:

case $1 in

-f)#模式匹配

...

;;#执行程序到此为止

-d | --directory)#支持OR

...

;;

*)#作为默认情况

echo $1: unknown option >$2#返回到标准错误

exit 1

esac

28.for语法:

for i in atlbrochure*.xml

do

echo $i

mv $i $i.old

sed 's/atlanta/&, the capital of the South/' < $i.old > $i

done

28.1.for循环的in列表是可选的,如果省略,Shell循环会遍历整个命令行参数。

29.while语法:

while condition

do

statements

done

30.until语法:

until condition

do

statements

done

31.break,跳出循环;continue,结束当前循环进入下次循环。

32.函数在使用之前必须定义,函数可以定义在脚本的起始处,也可以将它们放在另一个独立的文件里,然后以点号(.)命令来取用(source)他们。

33.在函数体里,位置参数都是函数的参数。父脚本的参数会临时地被函数参数所隐藏,$0为父脚本的名称。

34.在Shell函数体里使用exit,会终止整个shell脚本。

35.函数如果没有提供局部变量,则所有函数都与父脚本共享变量。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21038673/viewspace-709751/,如需转载,请注明出处,否则将追究法律责任。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值