shell

shell

变量

定义变量

Shell 支持以下三种定义变量的方式:

variable=value
variable='value'
variable="value"

使用变量

使用一个定义过的变量,只要在变量名前面加美元符号$即可,如:

author="ken"
echo $author
echo ${author}

变量名外面的花括号{ }是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

skill="Java"
echo "I am good at ${skill}Script"

系统变量

在命令行提示符直接执行 env、set 查看系统或环境变量。env 显示用户环境变量,set 显示 Shell 预先定义好的变量以及用户变量。可以通过 export 导出成用户变量。一些写 Shell 脚本时常用的系统变量:

$SHELL 默认 Shell
$HOME 当前用户家目录
$IFS 内部字段分隔符
$LANG 默认语言
$PATH 默认可执行程序路径
$PWD 当前目录
$UID 当前用户 ID
$USER 当前用户
$HISTSIZE 历史命令大小,可通过 HISTTIMEFORMAT 变量设置命令执行时间
$RANDOM 随机生成一个 0 至 32767 的整数
$HOSTNAME 主机名

将命令的结果赋值给变量

Shell 也支持将命令的执行结果赋值给变量,常见的有以下两种方式:

variable=`command`

variable=$(command)
[root@ken ~]# echo "this is ken" >test
[root@ken ~]# mes=`cat test`
[root@ken ~]# echo $mes
this is ken

删除变量

使用 unset 命令可以删除变量。语法:

unset variable_name

变量被删除后不能再次使用;unset 命令不能删除只读变量。

定义只读变量

[root@ken ~]# name=ken
[root@ken ~]# readonly name
[root@ken ~]# echo $name
ken
[root@ken ~]# unset name
-bash: unset: name: cannot unset: readonly variable

变量类型

运行shell时,会同时存在三种变量:

  1. 局部变量

局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。

  1. 环境变量

所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

  1. shell变量

shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

特殊变量列表(shell变量)

变量  含义

$0  当前脚本的文件名

$n  传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。

$#  传递给脚本或函数的参数个数。

$*  传递给脚本或函数的所有参数。

$?  上个命令的退出状态,或函数的返回值。:成功会返回 0,失败返回 1

$$  当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

运行

#!/bin/bash

echo "File Name: $0"

echo "First Parameter : $1"

echo "First Parameter : $2"

echo "Quoted Values: $@"

echo "Quoted Values: $*"

echo "Total Number of Parameters : $#"

结果

[root@ken ~]# bash test name age
File Name: test
First Parameter : name
First Parameter : age
Quoted Values: name age
Quoted Values: name age
Total Number of Parameters : 2

条件表达式

         		      表达式 	       			        实例
                    [ expression ] 	                [ 1 -eq 1 ]
                   [[ expression ]] 	               [[ 1 -eq 1 ]]
                   test  expression 	           test 1 -eq 1 ,等同于[]
[root@ken ~]# [ 1 -eq 2 ] && echo "this is true" || echo "this is false"
this is false
[root@ken ~]# [ 1 -eq 1 ] && echo "this is true" || echo "this is false"
this is true

注意:括号中的表达式前后都有空格,否则会报错

整数比较符

比较符 描述 实例
-eq, equal 等于 [ 1 -eq 1 ] 为true
-ne, not equal 不等于 [ 1 -ne 1 ] 为false
-gt, greate than 大于 [ 1 -gt 1 ] 为false
-lt, lesser than 小于 [ 1 -lt 1 ] 为false
-ge, greate or equal 大于或者等于 [ 1 -ge 1 ] 为true
-le, lesser or equal 小于或者等于 [ 1 -le 1 ] 为true

字符串比较符

         运算符 	                 描述 	                  实例
               == 	                 等于 	               [ “a” == “a” ] 为true
               != 	                不等于 	               [ “a” != “a” ] 为false
               -n 	         字符串长度不等于 0 为真 	        
               -z 	       字符串长度等于 0 为真 	        

注意:使用-n 判断字符串长度时,变量要加双引号,养成好习惯,字符串比较时都加上双引号。

# [ -z $a ] && echo yes || echo no
yes
# [ -n $a ] && echo yes || echo no
yes
# 加了双引号才能正常判断是否为空
# [ -z "$a" ] && echo yes || echo no
yes
# [ -n "$a" ] && echo yes || echo no

文件测试

        测试符 	             描述 	                   实例
        -e 	文件或者目录存在为真 	[ -e path ] path 存在为 true
        -f 	文件存在为真 	[ -f file_path ] 文件存在为 true
        -d 	目录存在为真 	[ -d dir_path ] 目录存在为 true
         -r 	有读权限为真 	[ -r file_path ]file_path有读权限为真
        -w 	有写权限为真 	[ -r file_path ]file_path有写权限为真
        -x 	有执行权限为真 	[ -r file_path ]file_path有执行权限为真

布尔运算符

       运算符 	              描述 	              实例
         ! 	非关系,条件结果取反 	[  ! 1 -eq 2 ]为true
         -a 	和关系,在[]表达式中使用 	[ 1 -eq 1 -a 2 -eq 2 ]为true两者都为真才为真
         -o 	或关系,在[]表达式中使用 	[ 1 -eq 1 -o 2 -eq 1 ]为true两者有一真则为真

逻辑判断符

                判断符 	                   描述 	                 实例
                 && 	 逻辑和,在[[]]表达式中或判断表达式是否为真时使用 	[[ 1 -eq 1 && 2 -eq 2 ]]为 true

                 || 	逻辑或,在[[]]表达式中或判断表达式是否为真时使用 	[[ 1 -eq 1 || 2 -eq 1 ]]为 true

注意:[] 不支持以上两个逻辑判断符,应该使用布尔运算符

运算表达式

             $(()) 	          $((1+1))
             $[] 	           $[]

shell括号用途总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值