【shell】常用语法 -b file  -c file  -f file-d file  -x file     

一、test条件判断

1,test文件测试:

-b file     若文件存在且是一个块特殊文件,则为真

-c file     若文件存在且是一个字符特殊文件,则为真

-d file     若文件存在且是一个目录,则为真

-e file     若文件存在,则为真

-f file     若文件存在且为一个规则文件,则为真

-g file     若文件存在且设置了SGID位的值,则为真

-h file     若文件存在且为一个符号链接,则为真

-k file     若文件存在且设置了“sticky”位的值,则为真

-p file     若文件存在且为一已命名管道,则为真

-s file     若文件存在且其大小大于零,则为真

-u file     若文件存在且设置了SUID位的值,则为真

-r file     若文件存在且可读,则为真

-w file     若文件存在且可写,则为真

-x file     若文件存在且可执行,则为真

-o file     若文件存在且被有效用户ID所拥有,则为真

2,test字符串比较

-z string         若string长度为0,则为真

-n string         若string长度不为0,则为真

string1 = string2    若两个字符串相等,则为真

string1 != string2   若两个字符串不相等,则为真

3,test命令的数字比较操作符

int1 -eq int2      若int1等于int2,则为真

int1 –ne int2      若int1不等于int2,则为真

int1 –lt int2      若int1小于int2,则为真

int1 –le int2      若int1小于等于int2,则为真

int1 –gt int2      若int1大于int2,则为真

int1 –ge int2      若int1大于等于int2,则为真

4,test复合表达式

! expr                     若expr为假则复合表达式为真。expr可以是任何有效的测试表达式

expr1 -a expr2           若expr1和expr2都为真,则为真

expr1 -o expr2           若expr1和expr2有一个为真,则为真

二、shell里的特殊变量

# sh /usr/local/bkeep/shell.sh 001 002

I'm $0 is:/usr/local/bkeep/shell.sh        //正在被执行脚本的名字;`basename $0`

I'm $1 is:001                //$1接收到的参数

I'm $2 is:002                //$2接收到的参数

I'm $# is:2                   //总共接收到的参数个数

I'm $* is:001 002         //把接收到的参数全部打印出来

I'm $@ is:001 002        //同上

I'm $? is:0                   //上一个脚本的退出状态“0”代表正常;“1”非正常退出

I'm $$ is:24137            //当前执行脚本的进程ID

I'm $! is:                     //前一个后台进程的id

三:其他

1.返回值 #?

cd dir

echo "$?"

如果dir存在,则返回0,不存在则返回1. 其他函数的命令也是一样,比如diff,等等。

每个命令都会返回一个 exit 状态(有时候也叫return 状态).成功返回0,如果返回一个非0 值,通
常情况下都会被认为是一个错误码.一个编写良好的UNIX 命令,程序,和工具都会返回一个0 作为
退出码来表示成功,虽然偶尔也会有例外.

同样的,脚本中的函数和脚本本身都会返回退出状态.在脚本或者是脚本函数中执行的最后的命
令会决定退出状态.在脚本中,exit nnn 命令将会把nnn 退出码传递给shell

$?读取最后执行命令的退出码.函数返回后,$?给出函数最后执行的那条命令的退出码.这种给
函数返回值的方法是 Bash 的方法.对于脚本来说也一样.总之,一般情况下,0 为成功,非0 失败W

2 .

$ 变量替换操作符
只有在变量被声明,赋值,unset 或exported 或者是在变量代表一个signal 的时候,
变量才会是以本来的面目出现在脚本里.变量在被赋值的时候,可能需要使用"=",
read状态或者是在循环的头部.
在""中还是会发生变量替换,这被叫做部分引用,或叫弱引用.而在''中就不会发生变
量替换,这叫做全引用,也叫强引用.这两个符合在同一个按键上。具体见第5 章的讨论.
注意:$var 与${var}的区别,不加{},在某些上下文将引起错误,为了安全,使用2.

还有一个按键在左上角,即按键1的左边。此按键有下面的作用。即将ls -l的结果传给a

17 a=`ls -l` # 把ls -l 的结果给a
18 echo $a # 别忘了,这么引用的话,ls 的结果中的所有空白部分都没了(包括换行)
19 echo
20 echo "$a" # 这么引用就正常了,保留了空白

或者直接

echo "$(ls -l)" 也可以取出目录

3.

在read 命令状态中
30 echo -n "Enter \"a\" "
31 read a
32 echo "The value of \"a\" is now $a."
33
34 echo
35

这个方法可以接受键盘输入到a中。

4.

在一个双引号中直接使用变量名,一般都是没有问题的.它阻止了所有在引号中的特殊字符的
重新解释--包括变量名[2]--但是$,`和\除外.[3]保留$,作为特殊字符的意义,是为了能够在双
引号中也能够正常地引用变量("$var").这样在""中可以使用变量所表达的值(Example 4-1).
使用""来防止单词分割.[4]如果在参数列表中使用双引号,将使得双引号中的参数作为一个参
数.即使双引号中的字符串包含多个单词(也就是包含空白部分),也不会变为多个参数,如:
1 variable1="a variable containing five words"
2 COMMAND This is $variable1 # COMMAND 将以7 个参数来执行
3 # "This" "is" "a" "variable" "containing" "five" "words"
4
5 COMMAND "This is $variable1" # COMMAND 将以1 个参数来执行

5.赋值的方法

--------------------------------------------------------

a:C风格的赋值
7 (( a = 23 )) # 给一个变量赋值,从"="两边的空格就能看出这是c 风格的处理.
8 echo "a (initial value) = $a"
9
10 (( a++ )) # 变量'a'后加1,C 风格.
11 echo "a (after a++) = $a"
12
13 (( a-- )) # 变量'a'后减1,C 风格.
14 echo "a (after a--) = $a"

------------------------------------------------

37(( t = a<45?7:11 )) # C 风格的3 元操作.
38 echo "If a < 45, then t = 7, else t = 11."
39 echo "t = $t " # Yes!

---------------------------------------------------

18 LIMIT=10
19
20 for ((a=1; a <= LIMIT ; a++)) # Double parentheses, and "LIMIT" with no "$".
20 for ((a=1; a <= LIMIT ; a++)) # 双圆括号, 并且"LIMIT"变量前边没有 "$".
21 do
22 echo -n "$a "
23 done

--------------------------------------------

b:let

4 a=2334 # 整型
5 let "a += 1"   #不加双引号也可以
6 echo "a = $a "  # a = 2335

--------------------------------------------------------------------

c:取变量

5 a=2334

6 a=$(($a+1))

7 echo "$a"   #a=2335

------------------------------------------

【shell】常用语法 -b file -c file -f file-d file -x file相关推荐

  1. shell常用语法之if [ $? -ne 0 ]

    shell常用语法之if [ $? -ne 0 ] 文章来源 语句if [ $? -ne 0 ] 扩展 文章来源 https://blog.csdn.net/JineD/article/details ...

  2. 每天学一点儿shell:Shell的常用语法规则

    文章目录 Shell 参数传递 Shell 数组 Shell 基本运算符 算数运算符 关系运算符 布尔运算符 逻辑运算符 字符串运算符(重点) 文件测试运算符 Shell 常用语法 Shell 函数 ...

  3. shell脚本常用语法大全

    shell脚本常用语法大全 一.shell简介 二.shell常用命令 2.1echo 2.2printf 2.3test 三.shell变量 3.1变量命名规则 3.2赋值方式 3.3使用变量 3. ...

  4. 成功解决FileNotFoundError: [Errno 2] No such file or directory: 'F:\\Program Files\\Python\\Python36\\li

    成功解决FileNotFoundError: [Errno 2] No such file or directory: 'F:\\Program Files\\Python\\Python36\\li ...

  5. 成功解决File amp;quot;f:\program files\python\python36\lib\re.pyamp;quot;, line 142, in amp;lt;modul

    成功解决File &quot;f:\program files\python\python36\lib\re.py&quot;, line 142, in &lt;modul ...

  6. Shell 的简单常用语法

    逻辑比较符号 -eq //等于-ne //不等于-gt //大于 (greater )-lt //小于 (less)-ge //大于等于-le //小于等于 命令的逻辑关系: - 在linux 中 命 ...

  7. Linux Shell常用技巧(三) sed

    Linux Shell常用技巧(三) sed 八.流编辑器sed 8.1 sed简介 sed是stream editor的缩写,一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区 ...

  8. Linux Shell常用技巧(十二) Shell编程

    二十三. Bash Shell编程:  1.  读取用户变量:     read命令是用于从终端或者文件中读取输入的内建命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后面,如 ...

  9. Linux Shell常用技巧(十二)

    二十三. Bash Shell编程:  1.  读取用户变量:     read命令是用于从终端或者文件中读取输入的内建命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后面,如 ...

最新文章

  1. jquery checkbox勾选/取消勾选的诡异问题
  2. 使用群集保障SQL Server 2005的高可用性(2)
  3. python编程if语法-21天学习python编程_if语句
  4. 计算机控制综合应用题,计算机网络管理综合应用题
  5. pwnable.tw unexploitable 分析
  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的医院管理系统
  7. win10samba服务器配置_win10访问samba配置共享目录,踩坑记
  8. 阿里规定超过三张表禁止join,这是为什么?
  9. 解决办法:undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
  10. PHP之Trait详解
  11. Shell脚本编程30分钟入门学习
  12. android 指纹识别驱动 win10,win10怎么添加指纹识别?Win10 Windows Hello指纹登录设置教程...
  13. r7 2700X装Linux,R7-2700X配什么主板?AMD锐龙7 2700X主板推荐 (全文)
  14. CocosCreator3D之相机跟随与旋转
  15. 计算几何专项:UVa 12307
  16. Excel VBA 之 UBound
  17. NSDate 农历节日
  18. C语言文件有关的基本知识,以及函数打开与关闭文件!
  19. 服务器共享cad修改不了,CAD图纸打开后无法编辑无法修改怎么办
  20. input框的输入事件

热门文章

  1. bucket sort count sort
  2. https://toonify.photos/ for Disney style
  3. 3 tables in management a company
  4. 什么是Hexo?妈妈再也不用担心我的网页编辑能力了
  5. 最新的Java SE平台和JDK版本发布计划
  6. [译] 基于事件流构建的服务
  7. Chrome插件会干坏事儿的
  8. strcpy 通过指针复制字符串出错问题
  9. vxworks 学习和windows azure 学习
  10. 数据库开发基本操作-SQL Server数据库基础知识