Open wuyuedefeng opened 3 years ago
#!/bin/bash echo "Hello World !"
#!/bin/bash your_name="qinjx" echo $your_name echo ${your_name} your_name="alibaba" echo $your_name # 设置只读,之后不可再重新赋值 readonly your_name # 删除变量, 变量被删除后不能再次使用。unset 命令不能删除只读变量。 unset your_name
字符串 #!/bin/bash your_name="runoob" # 使用双引号拼接 greeting="hello, ${your_name} !" echo $greeting # 获取字符串长度 string="abcd" echo ${#string} #输出 4 # 提取子字符串 (eg: 字符串第 2 个字符开始截取 4 个字符) string="runoob is a great site" echo ${string:1:4} # 输出 unoo # 查找子字符串 (eg: 查找字符 i 或 o 的位置(哪个字母先出现就计算哪个)) string="runoob is a great site" echo `expr index "$string" io` # 输出 4
字符串
#!/bin/bash your_name="runoob" # 使用双引号拼接 greeting="hello, ${your_name} !" echo $greeting # 获取字符串长度 string="abcd" echo ${#string} #输出 4 # 提取子字符串 (eg: 字符串第 2 个字符开始截取 4 个字符) string="runoob is a great site" echo ${string:1:4} # 输出 unoo # 查找子字符串 (eg: 查找字符 i 或 o 的位置(哪个字母先出现就计算哪个)) string="runoob is a great site" echo `expr index "$string" io` # 输出 4
> 数组 用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:`数组名=(值1 值2 ... 值n)` ```bash #!/bin/bash array_name=(0 1 2 3) # 读取数组: ${数组名[下标]} value0=${array_name[0]} echo ${array_name[@]} # 使用 @ 符号可以获取数组中的所有元素 # 获取数组的长度 length=${#array_name[@]} # 或 length=${#array_name[*]} # 取得数组单个元素的长度 # lengthn=${#array_name[n]}
注释 #!/bin/bash # 这是一个注释 # ----------------
注释
#!/bin/bash # 这是一个注释 # ----------------
:<<EOF 注释内容... 注释内容... 注释内容... EOF
:<<! 注释内容... 注释内容... 注释内容... !
# [传递参数](https://www.runoob.com/linux/linux-shell-passing-arguments.html) ```bash #!/bin/bash echo "Shell 传递参数实例!"; echo "执行的文件名:$0"; echo "第一个参数为:$1"; echo "第二个参数为:$2"; echo "第三个参数为:$3"; :<<EOF $* 与 $@ 区别: 相同点:都是引用所有参数。 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。 EOF echo "-- \$* 演示 ---" for i in "$*"; do echo $i done echo "-- \$@ 演示 ---" for i in "$@"; do echo $i done
### 执行test.sh $ chmod +x test.sh $ ./test.sh 1 2 3
if else
#!/bin/bash # 一行写法 if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi # 多行写法 a=10 b=20 if [ $a == $b ] then echo "a 等于 b" elif [ $a -gt $b ] then echo "a 大于 b" elif [ $a -lt $b ] then echo "a 小于 b" else echo "没有符合的条件" fi
for 循环 for var in item1 item2 ... itemN do command1 command2 ... commandN done #!/bin/bash for loop in 1 2 3 4 5 do echo "The value is: $loop" done # 顺序输出字符串中的字符 for str in This is a string do echo $str done
for 循环
for var in item1 item2 ... itemN do command1 command2 ... commandN done
#!/bin/bash for loop in 1 2 3 4 5 do echo "The value is: $loop" done # 顺序输出字符串中的字符 for str in This is a string do echo $str done
> while 语句 ```bash #!/bin/bash # int 从 1 开始,每次循环处理时,int 加 1, 返回数字 1 到 5,然后终止 int=1 while(( $int<=5 )) do echo $int let "int++" done # 输入信息被设置为变量FILM,按<Ctrl-D>结束循环 echo '按下 <CTRL-D> 退出' echo -n '输入你最喜欢的网站名: ' while read FILM do echo "是的!$FILM 是一个好网站" done
until 循环
#!/bin/bash # until 命令来输出 0 ~ 9 的数字 a=0 until [ ! $a -lt 10 ] do echo $a a=`expr $a + 1` done
case ... esac case 工作方式如上所示,取值后面必须为单词 in,每一模式必须以右括号结束。取值可以为变量或常数,匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。 #!/bin/bash echo '输入 1 到 4 之间的数字:' echo '你输入的数字为:' read aNum case $aNum in 1) echo '你选择了 1' ;; 2) echo '你选择了 2' ;; 3) echo '你选择了 3' ;; 4) echo '你选择了 4' ;; *) echo '你没有输入 1 到 4 之间的数字' ;; esac 跳出循环 #!/bin/bash
case ... esac case 工作方式如上所示,取值后面必须为单词 in,每一模式必须以右括号结束。取值可以为变量或常数,匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。
#!/bin/bash echo '输入 1 到 4 之间的数字:' echo '你输入的数字为:' read aNum case $aNum in 1) echo '你选择了 1' ;; 2) echo '你选择了 2' ;; 3) echo '你选择了 3' ;; 4) echo '你选择了 4' ;; *) echo '你没有输入 1 到 4 之间的数字' ;; esac
跳出循环
#!/bin/bash
while : do echo -n "输入 1 到 5 之间的数字:" read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束" break ;; esac done
while : do echo -n "输入 1 到 5 之间的数字: " read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是 1 到 5 之间的!" continue echo "游戏结束" ;; esac done
# [函数](https://www.runoob.com/linux/linux-shell-func.html) 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255) ```bash #!/bin/bash # base func demoFun(){ echo "这是我的第一个 shell 函数!" } echo "-----函数开始执行-----" demoFun echo "-----函数执行完毕-----" # 返回值 funWithReturn(){ echo "这个函数会对输入的两个数字进行相加运算..." echo "输入第一个数字: " read aNum echo "输入第二个数字: " read anotherNum echo "两个数字分别为 $aNum 和 $anotherNum !" return $(($aNum+$anotherNum)) } funWithReturn echo "输入的两个数字之和为 $? !" # 函数返回值在调用该函数后通过 $? 来获得。 # 函数参数 funWithParam(){ echo "第一个参数为 $1 !" echo "第二个参数为 $2 !" echo "第十个参数为 $10 !" echo "第十个参数为 ${10} !" echo "第十一个参数为 ${11} !" echo "参数总数有 $# 个!" echo "作为一个字符串输出所有参数 $* !" } funWithParam 1 2 3 4 5 6 7 8 9 34 73
Example
变量
多行注释
:<<EOF 注释内容... 注释内容... 注释内容... EOF
EOF 也可以换成其他符号, eg: !
:<<! 注释内容... 注释内容... 注释内容... !
基本运算符
echo命令
printf 命令
test 命令(检查某个条件是否成立)
流程控制
输出
This
is
a
string
break命令
while : do echo -n "输入 1 到 5 之间的数字:" read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束" break ;; esac done
continue
while : do echo -n "输入 1 到 5 之间的数字: " read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是 1 到 5 之间的!" continue echo "游戏结束" ;; esac done