|
| 1 | +# Shell变量 |
| 2 | +## 1.声明变量、使用变量、删除变量 |
| 3 | +#### 声明变量 |
| 4 | +```python |
| 5 | +# 方式一 |
| 6 | +var=abc |
| 7 | +# 方式二 |
| 8 | +var='abc' |
| 9 | +# 方式三 |
| 10 | +var="abc" |
| 11 | +``` |
| 12 | +#### 使用变量 |
| 13 | +```python |
| 14 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# var=abc |
| 15 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# echo $var |
| 16 | +abc |
| 17 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# echo ${var} |
| 18 | +abc |
| 19 | +``` |
| 20 | +#### 单引号与双引号区别 |
| 21 | +* 用单引号包围变量值时,单引号里内容是什么就输出什么,原样输出字符串 |
| 22 | +* 用双引号包围变量值时,输出时会先解析里面的变量和命令,再输出解析后的字符串 |
| 23 | + |
| 24 | +```python |
| 25 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# var=abc |
| 26 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# info='var is ${var}' |
| 27 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# echo $info |
| 28 | +var is ${var} |
| 29 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# info="var is ${var}" |
| 30 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# echo $info |
| 31 | +var is abc |
| 32 | +``` |
| 33 | +#### 只读变量 |
| 34 | +```python |
| 35 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# readonly var |
| 36 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# var=def |
| 37 | +-bash: var: readonly variable |
| 38 | +``` |
| 39 | +#### 删除变量 |
| 40 | +```python |
| 41 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# echo $info |
| 42 | +var is abc |
| 43 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# unset info |
| 44 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# echo $info |
| 45 | + |
| 46 | +``` |
| 47 | +#### 把命令的结果赋值给变量 |
| 48 | +* 方式一,反引号 |
| 49 | +* 方式二,$() |
| 50 | +* 如果被替换的命令的输出内容包括多行,或者含有多个连续的空白符,那么在输出变量时应该将变量用双引号包围,否则系统会使用默认的空白符来填充,这会导致换行无效,以及连续的空白符被压缩成一个。 |
| 51 | + |
| 52 | +```python |
| 53 | +# 方式一,反引号 |
| 54 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# cmd=`ls` |
| 55 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# echo $cmd |
| 56 | +hello.sh shell_1.sh shell_2.sh shell_3.sh shell_4.sh shell_5.sh shell_6.sh |
| 57 | +# 方式二,$() |
| 58 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# cmd=$(ll -lh) |
| 59 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# echo $cmd |
| 60 | +total 28K -rw-r--r-- 1 root root 145 Feb 24 16:50 hello.sh -rwxrwxrwx 1 root root 149 Mar 3 16:23 shell_1.sh -rwxrwxrwx 1 root root 333 Mar 3 16:40 shell_2.sh -rwxrwxrwx 1 root root 67 Mar 3 16:46 shell_3.sh -rwxrwxrwx 1 root root 79 Mar 3 17:05 shell_4.sh -rwxrwxrwx 1 root root 78 Mar 4 11:30 shell_5.sh -rwxrwxrwx 1 root root 114 Mar 4 13:41 shell_6.sh |
| 61 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# echo "$var" |
| 62 | +total 32K |
| 63 | +-rw-r--r-- 1 root root 145 Feb 24 16:50 hello.sh |
| 64 | +-rwxrwxrwx 1 root root 149 Mar 3 16:23 shell_1.sh |
| 65 | +-rwxrwxrwx 1 root root 333 Mar 3 16:40 shell_2.sh |
| 66 | +-rwxrwxrwx 1 root root 67 Mar 3 16:46 shell_3.sh |
| 67 | +-rwxrwxrwx 1 root root 79 Mar 3 17:05 shell_4.sh |
| 68 | +-rwxrwxrwx 1 root root 78 Mar 4 11:30 shell_5.sh |
| 69 | +-rwxrwxrwx 1 root root 114 Mar 4 13:41 shell_6.sh |
| 70 | +-rwxrwxrwx 1 root root 79 Mar 4 16:02 shell_7.sh |
| 71 | +``` |
| 72 | + |
| 73 | +## 2.变量的作用域 |
| 74 | +#### 局部变量:只在函数内部使用,定义时要用local声明,如果不加local,则是表示全局变量 |
| 75 | +```python |
| 76 | +#!/bin/bash |
| 77 | + |
| 78 | +function func(){ |
| 79 | + a=123 # 全局变量 |
| 80 | + local b=333 # 局部变量 |
| 81 | +} |
| 82 | +func |
| 83 | +echo $a # 123 |
| 84 | +echo $b # 空 |
| 85 | +``` |
| 86 | +#### 全局变量 |
| 87 | +**shell中定义的变量默认就是全局变量,仅在当前shell进程中有效。** |
| 88 | +#### 环境变量 |
| 89 | +**全局变量只在当前shell进程中有效,对其他shell进程和子进程无效。如果通过export命令将全局变量导出,就是环境变量,在子进程中也有效。** |
| 90 | +通过export导出的环境变量只对当前进程及其子进程有效,如果顶层的父进程被关闭,环境变量也就消失了。如果要让一个变量在所有的shell中都有效,可以将变量写入shell配置文件中,shell进程每次启动时候进行初始化。 |
0 commit comments