赞
踩
1)规定 (1)变量名和等号之间不能有空格(和其他编程语言不一样) (2)命名只能使用英文字母,数字和下划线,首个字符不能以数字开头 (3)中间不能有空格,可以使用下划线(_) (4)不能使用标点符号 (5)不能使用bash里的关键字(可用help命令查看保留关键字) 2)变量使用(只要在变量名前面加美元符号即可),示例: your_name="runoob.com" echo $your_name echo ${your_name} // 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界 3) 只读变量(只读变量的值不能被改变) myUrl="http://www.google.com" readonly myUrl 4)删除变量 myUrl="http://www.runoob.com" unset myUrl echo $myUrl
1)尽量使用双引号,因为里面可以有变量和出现转移字符 greeting_1="hello, ${your_name} !" 2)获取字符串长度 string="abcd" echo ${#string} # 输出 4 3)提取子字符串 string="runoob is a great site" echo ${string:1:4} # 输出 unoo (从字符串第 2 个字符开始截取 4 个字符) 4) 查找子字符串 string="runoob is a greate site" echo `expr index "$string" io` # 输出4,查找字符 i 或 o 的位置(哪个字母先出现就计算哪个)
1)bash支持一维数组(不支持多维数组),并且没有限定数组的大小 2)在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为: 数组名=(值1 值2 ... 值3) array_name=(1 2 3 4 5) 3) 读取数组 ${数组名[下标]} value=${array_name[1]} 4) 取得数组元素的个数 length=${#array_name[@]} length=${#array_name[*]} 5)取得数组单个元素的长度 length=${#array_name[n]}
1)以 # 开头的行就是注释,会被解释器忽略,通过每一行加一个 # 号设置多行注释
2)多行注释:(EOF 也可以使用其他符号)
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
1)显示普通字符串 echo "It is a test" # It is a test 2)显示转义字符 echo "\"It is a test\"" # "It is a test" 3) 显示变量 test_name="hh" echo "$test_name hello" # hh hello 4) 显示换行 echo -e "OK! \n" # -e 开启转义 echo "It is a test" # OK! # It is a test 5) 显示不换行 echo -e "OK! \c" # -e开启转义 \c 不换行 echo "It is a test" # OK! It is a test 6) 显示结果定向至文件 echo "It is a test" > myfile 7) 原样输出字符串,不进行转义或取变量(用单引号) echo '$name\"' # 输出 $name\" 8) 显示执行结果(注意不是单引号) echo `date` # 输出 Thu Jul 24 10:08:46 CST 2014
1)格式
(1). filename
(2)source filename
脚本: echo "Shell 传递参数实例!"; echo "执行的文件名:$0"; echo "第一个参数为:$1"; echo "第二个参数为:$2"; echo "第三个参数为:$3"; echo "参数个数为:$#"; echo "传递的参数作为一个字符串显示:$*"; 脚本执行: $ chmod +x test.sh $ ./test.sh 1 2 3 结果打印: 执行的文件名:./test.sh 第一个参数为:1 第二个参数为:2 第三个参数为:3 参数个数为:3 传递的参数作为一个字符串显示:1 2 3
1)$# 传递到脚本的参数个数
2)$* 以一个单字符串显示所有向脚本传递的参数
3)$$ 脚本运行的当前进程ID号
4)$! 后台运行的最后一个进程的ID号
5)$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数
1)相同点:都是引用所有参数
2)不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)
1)+ 加法 `expr $a + $b` 结果为 30
2)- 减法 `expr $a - $b` 结果为 -10
3)* 乘法 `expr $a \* $b` 结果为200
4)/ 除法 `expr $b / $a` 结果为2
5)% 取余 `expr $b % $a` 结果为0
6)= 赋值 a=$b 将把变量b的值赋给a
7) == 相等。用于比较两个数字,相同则返回 true [ $a == $b ]返回false
8)!= 不相等。用于比较两个数字,不相同则返回 true [ $a != $b ] 返回 true
1)-eq 检测两个数是否相等,相等返回 true [ $a -eq $b ] 返回false
2) -ne 检测两个数是否不相等,不相等返回 true [ $a -ne $b ] 返回true
3) -gt 检测左边的数是否大于右边的,如果是,则返回 true [ $a -gt $b ] 返回false
4) -lt 检测左边的数是否小于右边的,如果是,则返回 true [ $a -lt $b ] 返回true
5) -ge 检测左边的数是否大于等于右边的,如果是,则返回 true [ $a -ge $b ] 返回false
6) -le 检测左边的数是否小于等于右边的,如果是,则返回 true [ $a -le $b ] 返回true
1)! 非运算,表达式为 true 则返回 false,否则返回 true [ !false ] 返回 true
2) -o 或运算,有一个表达式为 true 则返回 true [ $a -lt 20 -o $b -gt 100] 返回true
3)-a 与运算,两个表达式都为 true 才返回 true [ $a -lt 20 -a $b -gt 100] 返回false
1)&& 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回false
2) || 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true
1)= 检测两个字符串是否相等,相等返回 true [ $a = $b ] 返回false
2)!= 检测两个字符串是否相等,不相等返回 true [ $a != $b ] 返回true
3) -z 检测字符串长度是否为0,为0返回 true [ -z $a ] 返回false
4) -n 检测字符串长度是否为0,不为0返回 true [ -n $a ] 返回true
5) str 检测字符串是否为空,不为空返回 true [ $a ] 返回true
1)-b 检测文件是否是块设备文件,如果是,则返回 true [ -b $file ] 返回false 2) -c 检测文件是否是字符设备文件,如果是,则返回 true [ -c $file ] 返回false 3) -d 检测文件是否是目录,如果是,则返回 true [ -d $file ] 返回false 4) -f 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true [ -f $file] 返回true 5) -g 检测文件是否设置了 SGID 位,如果是,则返回 true [ -g $file ] 返回false 6) -k 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true [ -k $file ] 返回false 7) -p 检测文件是否是有名管道,如果是,则返回 true [ -p $file ] 返回 false 8) -u 检测文件是否设置了 SUID 位,如果是,则返回 true [ -u $file ] 返回 false 9) -r 检测文件是否可读,如果是,则返回 true [ -r $file ] 返回 true 10) -w 检测文件是否可写,如果是,则返回 true [ -w $file ] 返回 true 11)-x 检测文件是否可执行,如果是,则返回 true [ -x $file ] 返回 true 12) -s 检测文件是否为空(文件大小是否大于0),不为空返回 true [ -s $file ] 返回 true 13) -e 检测文件(包括目录)是否存在,如果是,则返回 true [ -e $file ] 返回 true
1)if if condition then command1 command2 ... commandN fi 一行显示: if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi 2)if else if condition then command1 command2 ... commandN else command fi 3) if else-if else if condition1 then command1 elif condition2 then command2 else commandN fi
1)一般格式 for var in item1 item2 ... itemN do command1 command2 ... commandN done 写成一行: for var in item1 item2 ... itemN; do command1; command2… done; 2)示例: 脚本: for loop in 1 2 3 4 5 do echo "The value is: $loop" done 输出: The value is: 1 The value is: 2 The value is: 3 The value is: 4 The value is: 5
1) 格式
while condition
do
command
done
1)Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令 2)格式: case 值 in 模式1) command1 command2 ... commandN ;; 模式2) command1 command2 ... commandN ;; esac
1)linux shell 可以用户定义函数,然后在shell脚本中可以随便调用
2)可以带function fun() 定义,也可以直接fun() 定义,不带任何参数
3)参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值
functionName(){
}
脚本: funWithReturn(){ echo "这个函数会对输入的两个数字进行相加运算..." echo "输入第一个数字: " read aNum echo "输入第二个数字: " read anotherNum echo "两个数字分别为 $aNum 和 $anotherNum !" return $(($aNum+$anotherNum)) } funWithReturn echo "输入的两个数字之和为 $? !" 输出结果: 这个函数会对输入的两个数字进行相加运算... 输入第一个数字: 1 输入第二个数字: 2 两个数字分别为 1 和 2 ! 输入的两个数字之和为 3 !
脚本: 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 输出结果: 第一个参数为 1 ! 第二个参数为 2 ! 第十个参数为 10 ! 第十个参数为 34 ! 第十一个参数为 73 ! 参数总数有 11 个! 作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 ! 注意:$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数
注:文章是经过参考其他的文章然后自己整理出来的,有可能是小部分参考,也有可能是大部分参考,但绝对不是直接转载,觉得侵权了我会删,我只是把这个用于自己的笔记,顺便整理下知识的同时,能帮到一部分人。
ps : 有错误的还望各位大佬指正,小弟不胜感激
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。