shell的一些简单语法
1 | !/bin/zsh |
1. Shebang (#!/bin/zsh
)
#!/bin/zsh
是脚本的第一行,称为 Shebang。- 它指定了脚本使用的解释器,这里是
zsh
。 - 当脚本运行时,操作系统会使用
/bin/zsh
来执行脚本。
2. 函数定义 (is_prime
)
- 使用
function_name() { ... }
的语法定义了一个函数。 - 函数名是
is_prime
,它接受一个参数$1
(即传递给函数的第一个参数)。 - 函数体用
{ ... }
包裹。
3. 局部变量 (local num=$1
)
local
关键字用于声明局部变量,变量的作用域仅限于函数内部。shell 的变量默认在脚本内是全局的num=$1
将函数的第一个参数赋值给变量num
。- 注意在shell中,等号’=’的两边不能有空格
4. 条件判断 (if [ $num -lt 2 ]; then
)
if
是条件判断语句,用于检查条件是否为真。[ ... ]
是 Shell 中的条件测试语法(等同于test
命令)。-lt
是数值比较运算符,表示“小于”(less than)。类似的比较符还有-gt,-eq,-ge等等,和mybatisPlus很像if [ $num -lt 2 ]; then
的意思是“如果$num
的值小于 2”。- 注意 []两边必须留出一个空格
1. if [ ... ]
的语法
[ ... ]
是 Shell 中的条件测试语法(等同于test
命令)。- 在
[ ... ]
中,变量需要加上$
符号来引用其值。 - 注意两边必须留出一个空格
2. if (( ... ))
的语法
(( ... ))
是 Shell 中的算术运算语法。- 在
(( ... ))
中,变量名可以直接使用,不需要加$
符号。
5. 返回值 (return 1
和 return 0
)
return
用于从函数中返回值。- 在 Shell 中,
0
表示成功(真),非0
值表示失败(假)。 return 1
表示函数返回“不是素数”,return 0
表示函数返回“是素数”。
shell 的函数不能 return true 或者 false。只能用数字来表示 true/false。
0
表示 true。- 非
0
值表示 false。
6. 循环 (for ((i=2; i*i<=num; i++)); do
)
for (( ... ))
是 C 风格的for
循环语法,就不过多解释了。do
和done
之间的代码是循环体。
7. 算术运算 ($((num % i))
)
$(( ... ))
是 Shell 中的算术运算语法。num % i
计算num
除以i
的余数。-eq 0
是条件测试,检查余数是否等于 0。- 也可以改为
if((num % i == 0))
8. 用户输入 (read -p "请输入一个正整数:" number
)
read
命令用于从标准输入读取用户输入。-p
选项用于显示提示信息("请输入一个正整数:"
)。- 用户输入的值会被存储在变量
number
中。
9. 函数调用 (if is_prime $number; then
)
is_prime $number
调用is_prime
函数,并将number
作为参数传递。- 函数的返回值决定了
if
语句的执行逻辑。
10. 条件分支 (if ... then ... else ... fi
)
if ... then ... else ... fi
是 Shell 中的条件分支语句。- 如果
if
条件为真,执行then
后面的代码块。 - 如果
if
条件为假,执行else
后面的代码块。 fi
表示if
语句的结束。
11. 输出 (echo "$number 是素数。"
)
echo
命令用于输出文本到标准输出。"$number 是素数。"
是输出的字符串,$number
会被替换为变量的值。
12. 全局变量
shell 中使用 $来引用全局变量,如 zsh 中的配置文件.zshrc 会配置很多全局变量,如:
1 | export JAVA_HOME=/Users/xyhao/Library/Java/JavaVirtualMachines/corretto-11.0.26/Contents/Home |
那么在 shell 脚本中就能直接用$JAVA_HOME 来得到/Users/xyhao/Library/Java/JavaVirtualMachines/corretto-11.0.26/Contents/Home这个字符串。
这也可以解释为什么配置好了 Java 环境后,在任何一个目录的命令行里输入 java -v
就可以打印出 Java 的版本,因为JAVA_HOME 被注册为了全局变量
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 xyhao的博客!