=============================shell脚本=================================
脚本实例:
?#!/bin/bash??? 声明解释器
?for i in $(ls /etc);do
??echo $i
?done
?
?
readonly 变量名 -----? 使变量变为只读,不可删除
unset 变量名 ------- 删除变量,但是不能删除只读变量
字符串中---单引号:无变量,没有转移符
??---双引号:可有变量,可出现转义符
??
shell 中的字符串拼接,不用加+,python需要
echo ${#变量}?? 获取字符串长度
echo ${变量:1:3}? 切片,左右都包括
shell中定义数组:? li=(1 2 3)
???或者? li[0]=1
????? li[1]=2
????? li[2]=3
?????
??读取? ${li[n]}? 利用索引取值
???? ${li[@]}?? 取出所有
????
?获取数组长度
??len=${#li[@]}
??len=${#li[*]}
??len=${#li[n]}? 取数组内单个元素的长度
??
传参:
?echo "shell 传递参数实例!";
?echo "shell 执行的文件名:$0";??????????? $0代表文件名
?echo "shell 第一个参数为:$1";
?echo "shell 第二个参数为:$2";
?chmod +x test.sh?? 给文件加可执行权限
?./test.sh 1 2? 执行此文件?????????????? test.sh传给$0?? 1 2 依次传给$1和$2
?
?其他补充:
??$#? 传递到脚本的参数个数
??$*? 以单个字符串的形式显示参数,把所有参数作为一个整体形成一个大字符串
??[email?protected]? 与$*差不多,不过是分开的形式
算数运算符:
??? #!/bin/bash
?var=`expr 2 + 2?????????????? 2 + 2 中间必须有空格,不然无效
?echo "两数之和为:$var"
?注意:? 乘法的时候? 必须转义?? *
关系运算符:? 只支持数字,不支持字符串,除非字符串是数字
?-eq 是否等于
?-ne 是否不相等
?-gt? 大于
?-lt? 小于
?-ge? 大于等于
?-le? 小于等于
布尔运算符:
?!??? 非
?-o?? 或
?-a?? 与
?
逻辑运算符:
?&&?? AND
?||??? OR
?
字符串运算符:
?=?? 检测两个字符串是否相等,相等返回True
?!=? 检测连个字符串是否不想打,不相等返回True
?-z? 检测字符串长度是否为0,为0返回True
?-n? 检测字符串长度是否为0,不为0返回True
?str? 检测字符串长度是否为空,不为空返回True
?
文件测试运算符:
?...
echo命令:
?aa.sh文件
?#!/bin/bash
?read name
?echo "$name haha"
?
?执行./aa.sh文件
?输入OK
?显示 OK haha
echo -e? 开启转义
??? n 换行?? c不换行
echo ‘$name‘? 单引号原样输出
echo `date`? 输入执行结果?? 是反引号
printt? 例如:printf "Hello,Shelln"?? 手动添加n换行
printf "%-10s %-8s %-4sn" 姓名 性别 体重kg????
printf "%-10s %-8s %-4.2fn" 郭靖 男 66.1234
%s %c %d %f都是格式替代符
%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f 指格式化为小数,其中.2指保留2位小数。
# 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替
?例:printf "%s and %d n"? --->>>??? and 0
test测试
?数值测试
?-eq? 等于则为真
?-ne? 不等于则为真
?-gt? 大于则为真
?-ge?? 大于等于则为真
?-lt?? 小于则为真
?-le?? 小于等于则为真
?例:
??num1=100
??num2=100
??if test $[num1] -eq $[num2]
??then
???echo ‘两个数相等!‘
??else
???echo ‘两个数不相等!‘
??fi
?字符串测试
?=?? 等于则为真
?!=?? 不相等则为真
?-z? 字符串的长度为零则为真
?-n?? 字符串的长度不为零则为真
?文件测试
?-e? 如果文件存在则为真
?-r? 如果文件存在且可读则为真
?-w? 如果文件存在且可写则为真
?-x? 如果文件存在且可执行则为真
?-s? 如果文件存在且至少有一个字符则为真
?-d? 如果文件存在且为目录则为真
?-f? 如果文件存在且为普通文件则为真
?-c? 如果文件存在且为字符型特殊文件则为真
?-b? 如果文件存在且为块特殊文件则为真
??例:
???if test -e ./bash
???then
????echo ‘文件已存在!‘
???else
????echo ‘文件不存在!‘
???fi
?Shell还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为:"!"最高,"-a"次之,"-o"最低。
?
流程控制
if? elif? else
?if condition1
?then
??command1
?elif condition2
?then
??command2
?else
??commandN
?fi
for循环
? for var in item1 item2 ... itemN
?do
??command1
??command2
??...
??commandN
?done
while循环
?#!/bin/bash
?int=1
?while(( $int<=5 ))
?do
??echo $int
??let "int++"
?done
?
?FILM监控键盘输入信息
?echo ‘按下 <CTRL-D> 退出‘
?echo -n ‘输入你最喜欢的网站名: ‘
?while read FILM
?do
??echo "是的!$FILM 是一个好网站"
?done
?
?until 循环
?until 循环执行一系列命令直至条件为 true 时停止。
?until 循环与 while 循环在处理方式上刚好相反。
?一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用。
?until 语法格式:
?until condition
?do
??command
?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
?
break continu? 与python一样?
函数调用:?funWithReturn(){??echo "这个函数会对输入的两个数字进行相加运算..."??echo "输入第一个数字: "??read aNum??echo "输入第二个数字: "??read anotherNum??echo "两个数字分别为 $aNum 和 $anotherNum !"??return $(($aNum+$anotherNum))?}?funWithReturn?echo "输入的两个数字之和为 $? !"??输出类似下面: ?这个函数会对输入的两个数字进行相加运算...?输入第一个数字: ?1?输入第二个数字: ?2?两个数字分别为 1 和 2 !?输入的两个数字之和为 3 !? ---->>>>? 注意:函数返回值在调用该函数后通过 $? 来获得。 ? 注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。 ? ? 输出重定向:>?? >>追加输出? ? 输入重定向:<?? 从文件中获取? shell中的文件引用???? . ./文件名???? 或???? source ./文件名