- 编写shell脚本
nano test.sh
命令 | 描述 |
---|---|
Ctrl + W | 搜索文档 |
按Ctrl + W,然后按Control + R. | 搜索和替换 |
Ctrl + G. | 显示所有可能的命令 |
Ctrl + Y / V. | 页面向上/向下 |
Ctrl + C. | 显示文件中的当前位置和文件大小 |
sh test.sh #直接运行?
#chmod + x ./test.sh
sh test.sh #也是直接运行? 但需要权限
ANIMAL = penguin ANIMAL包含字符串penguin(因为没有空格,所以显示了不使用引号的替代语法)。 ANIMAL="penguin"
#!/bin/bash
echo -n "What is your name? "
read NAME #从键盘输入
echo "Hello $NAME!"
- 后跟数字N的美元符号对应于传递给脚本的第N个参数
该$0变量包含脚本本身的名称
- 后跟数字N的美元符号对应于传递给脚本的第N个参数
- exit命令设置自己脚本的退出代码:
在exit 1返回退出代码1给调用者。这甚至适用于shell,如果从命令行运行此脚本然后键入,echo $?您将看到它返回1。
按照惯例,退出代码0意味着“一切都好”。任何退出代码都大于0意味着发生了某种错误,这是特定于程序的。你上面看到grep使用1意味着字符串没有被发现。
- if语句
#!/bin/bash
if grep -q root /etc/passwd; then
echo root is in the password file
elif ["$ 1"="xx"];then #$1引用变量并使用字符串比较运算符而不是数字版本(-eq)
xxxxxxxxxxxxxx
else
echo root is missing from the password file
fi #结束else块 并不是结束if
- 该test命令使您可以轻松访问比较和文件测试操作符if[]里的相当于test
test –f /tmp/foo; then
if [ -f /tmp/foo]; then
命令 | 描述 |
---|---|
test –f /dev/ttyS0 | 0 如果文件存在 |
test ! –f /dev/ttyS0 | 0 如果该文件不存在 |
test –d /tmp | 0 如果目录存在 |
test –x which ls
|
如果用户可以执行,ls则替换then的位置test |
test 1 –eq 1 | 0 如果数字比较成功 |
test ! 1 –eq 1 | NOT – 0 如果比较失败 |
test 1 –ne 1 | 更容易,test数字不平等 |
test “a” = “a” | 0 如果字符串比较成功 |
test “a” != “a” | 0 如果字符串不同 |
test 1 –eq 1 –o 2 –eq 2 | -o 是OR:要么可以是相同的 |
test 1 –eq 1 –a 2 –eq 2 | -a 是AND:两者必须相同 |
重要的是要注意test不同地看整数和字符串比较。01并且1通过数字比较是相同的,但不是通过字符串比较。您必须始终小心记住您期望的输入类型。
- –gt大于,测试一个文件是否比另一个更新的方法等等。有关test man
- 在if/ elif/ else测试可能会变得非常冗长和复杂。该case语句提供了一种使多个测试更容易的不同方法。
该case语句以对被测表达式的描述开始:。这里的表达是引用的。case EXPRESSION in$1
#!/bin/bash
case "$1" in
hello|hi) #多个选项由垂直条分隔,垂直条|是许多编程语言中的OR运算
echo "hello yourself" #f返回 true则执行的命令
;;
goodbye)
echo "nice to have met you"
echo "I hope to see you again"
;;
*) #同else? 因为匹配一切 确保最后一个匹配
echo "I didn't understand that"
esac
- 循环 for while
#!/bin/bash
for NAME in Sean Jon Isaac David; do
echo "Hello $NAME"
done
for S in *; do #使用*一个文件glob。这会通过shell扩展到当前目录中的所有文件
echo "Doing something to $S"
done
每次迭代时执行一次test以查看它是否应该运行另一次
#!/bin/bash
i=0
while [ $i -lt 10 ]; do # 小于10
echo $i
i=$(( $i + 1))
done
echo “Done counting”
网友评论