【shell】shell基础
一、数据类型1.shell变量运行shell时,会同时存在三种变量:
1.1命名规则
1.2引用变量 $varible_name ${varible_name} 1.3只读变量 readonly varible_name 1.4删除变量 unset?varible_name 注意:unset不能删除只读变量 2.shell字符串2.1单双引号区别
2.2获取字符串长度 ${#str_name} 2.3提取字符串 echo ${str_name:n:m}? 从第N个起截取Mge字符(包括空格)
2.4查找字符串位置 str="today is monday" echo `expr index "${str}" as char` (起始值为1) 查找字符?m?或?o?的位置(哪个字母先出现就计算哪个):
3.数组3.1定义数组 array_name=(value0 value1 value2 ....) 或array_name[0]=value1 3.2读取数组 获取特定值:${array_name[n]} 获取所有数值${array_name[@]} 3.3获取数组长度 ${#array_name[@]}或${#array_name[*]} 获取单个元素长度 ${#array_name[n]} ? 4.注释4.1单行注释 # 4.2多行注释 二、shell传递参数1.传递参数1.1传递参数 脚本中内容如下: 1 #!/bin/bash 2 3 echo "Shell 传递参数实例!"; 4 echo "执行的文件名:$0"; 5 echo "第一个参数为:$1"; 6 echo "第二个参数为:$2"; 7 echo "第三个参数为:$3"; ? 为脚本设置可执行权限并执行脚本,结果如下: $ chmod +x test.sh $ ./test.sh 1 2 3 #传入了4个参数 Shell 传递参数实例! 执行的文件名:./test.sh 第一个参数为:1 第二个参数为:2 第三个参数为:3 ? ?注意:在linux系统中输入以上命令时提示“/bin/sh^M:损坏的解释器: 没有那个文件或目录” 这是由于脚本文件在保存时使用了DOS文件格式造成的,可以用vim打开文件,然后执行下列操作: :set ff=unix :wq
注意:$*与[email?protected]的区别: 只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。 ? 三、shell运算符1.算数运算符原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用 如:val=`expr 2 + 2`或 $[2+2] 2.关系运算符
3.布尔运算符
4.逻辑运算符
5.字符串运算符
a=10 b=20 if [ $a != $b ] then echo "$a != $b : a 不等于 b" else echo "$a != $b: a 等于 b" fi ? 6.文件测试运算符
注意:表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2;赋值=左右两端不能有空格 条件表达式要放在方括号之间,并且要有空格,例如:?[$a==$b]?是错误的,必须写成?[ $a == $b ] 乘号(*)前边必须加反斜杠()才能实现乘法运算; 四、命令1.echo1.1显示普通字符串 1.2显示转义字符串 echo " "hello" " 1.3显示变量 1.4显示换行 换行: echo -e "today is n" echo “Friday” 不换:??echo -e "today is c" echo “Friday” 1.5显示重定向 echo "it is a test">myfile 1.6原样输出 单引号 echo ‘my $name ‘ 1.7显示命令执行结果 echo `expr date` 2.printf类似c中printf,详见https://www.runoob.com/linux/linux-shell-printf.html 3.testShell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试 详见https://www.runoob.com/linux/linux-shell-test.html 以下程序效果一样
五、循环1. if else1 if condition1 2 than 3 command1 4 elif condition2 5 than 6 command2 7 else 8 than 9 command 3 10 fi ? ?2.for 循环1 for var in item1 item2 ... itemN 2 do 3 command1 4 command2 5 ... 6 commandN 7 done ? 3.whilewhile condition do command done
4.unitiluntil condition do command done
5.case1 case 值 in 2 模式1) 3 command1 4 command2 5 commandN 6 ;; 7 *) 8 command1 9 command2 10 commandN 11 ;; 12 esac ? 无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。 6.跳出循环(break和continue)六、shell函数1.定义函数[ function ] funname [()] { action; [return int;] }
1 funWithReturn(){ 2 a=1 3 b=2 4 echo "两个数字分别为 $a和 $b!" 5 return $[a+b] 6 } 7 funWithReturn 8 echo "输入的两个数字之和为 $? !" 注意:函数返回值在调用该函数后通过 $? 来获得。? 2.函数参数在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数... 注意:$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。 ?七、shell文件包含. filename # 注意点号(.)和文件名中间有一空格 或 source filename
1 #!/bin/bash 2 #使用 . 号来引用test1.sh 文件 3 . ./test1.sh 4 # 或者使用以下包含文件代码 5 # source ./test1.sh 6 echo "菜鸟教程官网地址:$url" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |