一 Linux系统中Shell脚本编写
1 脚本解释器
#!/bin/sh 和 #!/bin/bash 都是脚本文件的开头,用来指定脚本文件的解释器。其中 #!/bin/sh 指定的是 Bourne shell 解释器,而 #!/bin/bash 指定的是 Bash shell 解释器。
Bash shell 是 Bourne shell 的增强版,它支持更多的特性和语法。因此,如果脚本中需要使用 Bash shell 特有的语法或特性,就需要使用 #!/bin/bash 来指定解释器。
Bash比Sh功能多
2 变量的声明与赋值
在Shell脚本中,声明变量非常简单,不需要指定变量类型。
等号赋值
给变量赋值时,用=号,但不允许有空格存在。
MY_VARIABLE=value
myVariable=anotherValue
使用双引号或单引号来包含字符串值,这取决于是否需要保留变量内的特殊字符。
myString="This is a string."
mySingleQuoted='This is also a string.'
从执行的命令赋值
使用反引号 `` 或者 $() 来运行命令并将结果赋给变量
myCommandResult=`date`
# 或者
myCommandResult=$(date)
双引号,单引号
shell脚本使用双引号,单引号输出字符串的区别如下
双引号 " " | 单引号 ’ ’ |
---|---|
执行变量替换 | 不执行变量替换 |
执行命令替换 | 不执行命令替换 |
仅保留空白字符 | 保留所有字符原本内容输出 |
双引号中若想要使换行符"\n", echo打印时需要 echo -e,或者用printf打印
例如:
echo "Today is $(date)"
会输出Today is (date的命令执行结果)
访问变量
访问变量值时,需要在变量前加 $ 符号。也可使用 ${} 来明确变量名字的边界。
echo "The value of the variable is: $myVariable"
long_variable_name=value
echo "The value is: ${long_variable_name}"
强制转换
将变量转换为数字或其他格式。
echo "The number is: $((myVariable))"
算数运算
Shell脚本中,$(()) 运算符将变量或表达式转换为整数并执行算术运算。
判断条件
if 语句可以用 [ ] 和 ( ) 表达判断条件。
#!/bin/bash
# 定义一个变量
MY_VAR=5
# 使用方括号进行条件测试
if [ "$MY_VAR" -eq 5 ]; then
echo "MY_VAR is equal to 5"
else
echo "MY_VAR is not equal to 5"
fi
条件运算符
使用 ( ) 的判断条件不需要用 $ 符合,且 (()) 可以直接处理整数运算
#!/bin/bash
# 定义一个变量
MY_VAR=5
# 使用圆括号进行条件测试
if (( MY_VAR == 5 )); then
echo "MY_VAR is equal to 5"
else
echo "MY_VAR is not equal to 5"
fi
For循环脚本
最简单的 for 循环形式是遍历一个列表或一系列的值。
#!/bin/bash
# 定义一个列表
fruits=("apple" "banana" "cherry")
# 遍历列表
for fruit in "${fruits[@]}"; do
echo "I like $fruit"
done
在Shell脚本中,${fruits[@]} 是一种特殊的语法,用于引用数组 fruits 中的所有元素。这里对这个表达式的各个部分做一个详细的解释:
$ { variable }:这是变量引用的基本语法。它告诉 Shell 解释器要使用变量 variable 的值。
[@] : 这是一个特殊的操作符,用于获取数组中的所有元素。
当它们组合在一起时,${fruits[@]} 表示“获取数组 fruits 中的所有元素,并作为一个列表返回”。
遍历一系列的值
#!/bin/bash
# 遍历一系列值
for i in 1 2 3 4 5; do
echo "Number: $i"
done
# 使用通配符遍历文件
for file in *.txt; do
echo "Processing file: $file"
done
二 执行命令时绑定CPU核心的命令 taskset
查看服务器上一共有多少CPU
lscpu
运行taskset命令绑定CPU
taskset -c 0,10 ./bind_core