AI智能
改变未来

shell常用命令(变量、运算符、流程控制及权限)

文章目录

  • 一、执行shell脚本
  • 二、变量的声明
  • 三、运算符
  • 四、流程控制

一、执行shell脚本

1.新建并进入sh 文档
vi test.sh

2.文档编辑格式 首行: #!/bin/bash(#表示注释 !后面表示默认执行的语言)

3.增加执行权限chmod +x test.sh

4.执行shell脚本的三种方式:
方法一:./test.sh
方法二:sh test.sh
方法三: /bin/bash test.sh(常用场景:环境配置错误的时候)

二、变量的声明

1.变量的命名规范:

  • 变量名和等号之间不能有空格
  • 命名只能使用英文字母,数字和下划线,
  • 首个字符不能以数字开头 中间不能有空格,可以使用下划线(_)
  • 不能使用标点符号
  • 不能使用bash里的关键字(可用help命令查看保留关键字)

2.变量的类型

  • 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  • 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  • shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

3.变量的声明(注意:变量名外面的花括号是可选的,加{}可以有利于变量的区分)

abc=123   #不需要声明变量aaa=$JAVA_PATH  #环境变量可以直接引用,如果不使用$ 打印aaa将会出现字符串JAVA_HOME


4.shell字符串(单引号和双引号的区别)
①单引号

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

②双引号

  • 双引号里可以有变量
  • 双引号里可以出现转义字符
name=\"shell\"#双引号拼接str=\"hello, \"$name\" !\"str01=\"hello, ${name} !\"echo $str  $str01      #结果为   hello, shell ! hello, shell !#单引号拼接str02=\'hello, \'$name\' !\'str03=\'hello, ${name} !\'echo $str02  $str03      #结果为   hello, shell ! hello,  ${shell} !

5.替换

#!/bin/bashabc=123aaa=$java_homeabc=${abc/\'1\'/\'h\'}  表示在abc变量中找到1就替换为hecho ${aaa} ${abc}

6.将命令的结果分配给变量(以pwd为例)

path=`pwd`(注意:这里是反引号,不是单引号)echo ${path}


7.(()) 双括号表示执行 $[]也可以表示执行

方法一:((c=$a+$a*2))方法二:d=$[$a+$b*2]

8.预定义变量($? 状态为0表示成功执行

选项 说明
$# 命令行参数或位置参数的数量
$? 最近一次执行的命令或shell脚本的出口状态
$0 命令本身
$* 表示所有的位置参数,其值是所有位置参数的值
$$ 变量是shell脚本里面的进程ID。Shell脚本经常使用 $$ 变量组织临时文件名,确保文件名的唯一性
  1. 位置变量
$n:$0代表命令本身,$1-$9代表顺序参数编号,大于10的话使用括号,如${10}



注意:bash shell脚本中变量无法存储布尔值,布尔值只能用于条件判断(注意:条件判断中非空都为true)

三、运算符

1.shell数值关系运算符

选项 说明
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-le 小于或等于
-ge 大于或等于

2.shell逻辑运算符

选项 说明
-a或&& 逻辑与
-o或

||
逻辑或
! 逻辑否

3.shell字符串运算符

选项 说明
= 等于
!= 不等于
-z 判断是否为空

4.shell文件运算符

选项 说明
-d 判断是否为目录
-e 判断目录或文件是否存在
-f 判断是否为文件
-r 判断文件或目录针对当前用户是否可读
-w 判断文件或目录针对当前用户是否可写
-x 判断文件或目录针对当前用户是否可执行

四、流程控制

  1. if test
    test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
num1=123num2=123if test  $num1 -eq $num2thenecho \'两个数相等!\'elseecho \'两个数不相等!\'fi


2.if语句

if  条件thenfi

3.if-else 语句

if  条件then...else...fi

4.if-else-if语句:

if   条件then...elif   条件then...else...fi

5.for循环

for((a=1;a<=5;a++))do...done

6.增强for循环

for a in parm1 parm2 parm3 ...do...done

7.while循环

a=1while [ a  <= 5 ]do...let “a++”done

8.case判断

case 变量 in:值1)...;;         #相当于break值2)...;;*)              #相当于default...;;esac
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » shell常用命令(变量、运算符、流程控制及权限)