Shell笔记
#!/bin/bash var2 = 'var2' echo $var2 echo ${var2} var2 = 'var2_1' #变量可以重复定义但变量名前不加$ var3 = 'var3' readonly var3 #将var3声明为只读变量 #var3 = 'var3_1' 这里就不能再改变var3的值了 var4 = 'var4' unset var4 #删除var4变量 #echo ${var4} 这里不能再调用var4了 var5 = 'var5' var6 = "This is ${var5}" #拼接字符串 var7 = "This is "$var5" ,too" #拼接字符串 var8 = 'itvar8' echo ${#var8} #输出var8的长度,即输出6 var9 = 'Hello World!' echo ${var9:1:5} #从字符串第2个字符开始截取5个字符 var10 = 'Hello World!' echo `expr index "$var10" World` #查找字符World在字符串中的位置 arr1 = ('var1' 'var2' 'var3') #定义数组方式1 arr2 = ( #定义数组方式2 'var1' 'var2' 'var3' ) var3[1] = 'var2' #通过下标赋值 var_arr_1 = ${var2[1]} #读取数组元素 var_arr_all = ${var2[@]}#读取所有元素 arr_lend_1 = ${#var2[@]} #获取数组长度 arr_lend_2 = ${#var2[*]} #获取数组长度
向脚本传递参数
#!/bin/bash echo "执行的文件名$0"; echo "第一个参数为$1"; echo "第二个参数为$2";
运行:
$ chmod +x shell.sh $ ./shell.sh 1 2 执行的文件名shell.sh 第一个参数为1 第二个参数为2
特殊参数:
参数处理 说明 $# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 $$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的ID号 $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。 如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。 $- 显示Shell使用的当前选项,与set命令功能相同。 $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
算术运算:
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,比如awk和expr
#!/bin/bash a=10 b=20 val=`expr $a + $b` echo "a + b : $val"
文件测试运算符:
-r file :文件是否可读
-w file: 文件是否可写
-x file: 文件是否可执行
file="/workplace/shell/shell.sh" if [ -r $file ] then echo "文件可读" else echo "文件不可读" fi if [ -w $file ] then echo "文件可写" else echo "文件不可写" fi if [ -x $file ] then echo "文件可执行" else echo "文件不可执行" fi
echo命令:
#!/bin/bash read name #read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量 echo $name echo "Hello World" > myfile #显示结果定向至文件
流程控制:
if的语法:
if condition1 then command1 elif condition2 then command2 else commandN fi
for的语法:
for var in item1 item2 ... itemN do command1 command2 ... commandN done
while的语法:
while condition do command done
例:
#!/bin/sh int=1 while(( $int<=5 )) do echo $int let "int++" done
case的语法:
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
函数
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