Home shell脚本
Post
Cancel

shell脚本

第一个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
This post is licensed under CC BY 4.0 by the author.