1.read 让用户输入 并读取用户输入的数据
echo "请输入名字:"
read Name
echo "你的名字:$Name"
2.使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
3.使用 unset 命令可以删除变量。
语法:
unset variable_name
变量被删除后不能再次使用;unset 命令不能删除只读变量。
4.以单引号' '包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令(命令需要反引起来)也会把它们原样输出。这种方式比较适合定义显示纯字符串的情况,即不希望解析变量、命令等的场景。
以双引号" "包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出。这种方式比较适合字符串中带有变量和命令并且想将其解析后再输出的变量定义。
例如:
Name="小明"
text='你的名字:$Name'
text1="你的名字:$Name"
echo $text //你的名字:$Name
echo $text1 //你的名字:小明
5.Shell的变量分为3种:
- 环境变量:能在其他shell使用
- 全局变量:只能在当前shell使用
- 局部变量:只能在当前方法使用
6.local关键字就相当于把变量的作用域限制在了当前方法中 将变量变成了局部变量
7.export关键字 将一个变量变成环境变量 通过export命令导出的环境变量是临时的,关闭 Shell 会话后它就销毁了。所以,这种环境变量也只是在局部范围内起作用,并不影响所有 Shell
8.给脚本文件传递位置参数 方法传参数跟文件传递位置参数是一样的
$ test.sh Shell http://c.biancheng.net/shell
//脚本的名字:test.sh
echo "Language: $1" //Shell
echo "URL: $2" // http://c.biancheng.net/shell
- Shell 特殊变量及其含义
- $0 当前脚本的文件名。
- $n(n≥1) 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1,第二个参数是 $2。
- $# 传递给脚本或函数的参数个数。
- $* 传递给脚本或函数的所有参数。
- $@ 传递给脚本或函数的所有参数。
- $? 上个命令的退出状态,或函数的返回值。
- $$ 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。
10."$*"和"$@"的区别
#!/bin/bash
echo "print each param from \"\$*\""
for var in "$*"
do
echo "$var"
done
echo "print each param from \"\$@\""
for var in "$@"
do
echo "$var"
done
$ sh test.sh a b c d
运行结果:
print each param from "$*"
a b c d
print each param from "$@"
a
b
c
d
11.Shell 中获取字符串长度 具体方法如下:
str="this is string"
echo ${#str}
运行结果:
15
12.字符串的拼接 直接写在一起就能实现拼接
13.字符串截取
- ${string: start :length} 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。
- ${string: start} 从 string 字符串的左边第 start 个字符开始截取,直到最后。
- ${string: 0-start :length} 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。
- ${string: 0-start} 从 string 字符串的右边第 start 个字符开始截取,直到最后。
- ${string#*chars} 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
- ${string##*chars} 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
- ${string%*chars} 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。
- ${string%%*chars} 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。
14.数组的删除
unset arr[1] //删除小标为1的元素
15.数组的拼接跟字符串的拼接类似
array_new=(${array1[@]} ${array2[@]}) //@ 或者 * 都是指获取数组的全部元素
array_new=(${array1[*]} ${array2[*]})
16.获取数组的长度
${#nums[*]} //获取数组的长度