第一个Shell脚本
shell脚本以时候结尾,所以创建test.sh文件
1
2
#!/bin/bash
echo "Hello World !"
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
运行脚本
1
2
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
变量
-
命名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
# 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。 # 等号左右不能有空格 your_name="jiangker.icu" # 使用别的语句给变量赋值 # 循环出目录下文件名称 for file in `ls /etc` 或 for file in $(ls /etc) # 重新命名变量时不需要使用$符号,使用值时才需要加 your_name="jiang" echo ${your_name} your_name="jiangker" echo ${your_name} # 只读变量,后续不能再重新赋值 myUrl="https://www.jiangker.icu" readonly myUrl #删除变量,unset 命令不能删除只读变量。 unset variable_name
-
使用
1 2 3 4 5
# 使用变量时使用$符号,最好也带上括号 # 循环输出根目录文件名称 for name in $(ls ~);do echo ${name} done
-
字符串操作
1 2 3 4 5 6 7 8 9 10 11 12
# 单引号声明变量,不能有单独的一个单引号,不能转义字符 str='jiangker' echo 'my name is '$str' .' # 这种用法单双引号都可以 # 双引号声明变量 str="jiangker" echo "my name is ${str} ." # 这种只能双引号 # 获取字符串长度 str="jiangker" echo ${#str} # 输出7 # 提取子字符串 echo ${str:1:4} # 输出iang
数组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
array_name=(value0 value1 value2 value3)
# 或
array_name=(
value0
value1
value2
value3
)
# 或
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
# 读取元素
name=${array_name[0]}
# @表示所有元素
echo ${array_name[@]}
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
传递参数
脚本内容
1
2
3
4
5
6
echo "Shell 传递参数实例!";
echo "第一个参数为:$1";
echo "第二个参数为:${2}";
echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";
调用脚本
1
./test.sh j k
输出
1
2
3
4
5
Shell 传递参数实例!
第一个参数为:j
第二个参数为:k
参数个数为:2
传递的参数作为一个字符串显示:j k
参数判断
测试语句格式:[ 条件表达式 ]
- 文件测试语句
- 逻辑测试语句
- 整数值比较语句
- 字符串比较语句
文件测试语句
运算符 | 作用 |
---|---|
-d | 测试文本是否为目录类型 |
-e | 测试文件是否存在 |
-f | 判断是否为一般文件 |
-r | 测试当前用户是否拥有可读权限 |
-w | 测试当前用户是否拥有可写权限 |
-x | 测试当前用户是否有权限执行 |
1
2
3
4
5
6
7
8
9
10
## 测试结果
[ -d /etc/fstab ]
## 获取上次结果
echo $?
## 也可以
[ -e /dev/cdrom ] && echo "Exist"
# && 前面语句成立执行,||前面条件不成立执行,组合类似if else
[ $USER = root ] && echo "root" || echo "user"
整数比较运算符
运算符 | 作用 |
---|---|
-eq | 是否等于 |
-ne | 是否不等于 |
-gt | 是否大于 |
-lt | 是否小于 |
-le | 是否小于或等于 |
-ge | 是否大于或等于 |
字符串比较
运算符 | 作用 |
---|---|
= | 内容是否相等 |
!= | 是否不同 |
-z | 是否为空 |
1
2
[ -z $SHELL ]
echo $?
if语句
1
2
3
4
5
6
7
8
if [ true ]
then
echo "if"
elif
echo "else if"
else
echo "else"
fi
for循环
1
2
3
4
for name in (list)
do
# command
done
while
1
2
3
4
while true
do
# command
done