【Shell】Linux Shell脚本基础命令
因为只是要写个脚本下数据,o(T.T)o,所以就浅尝辄止下下。只是需要用到的用法用下。
注: Cygwin环境下的,由于是模拟环境所以有些写法和Linux不一样。
1. 数组
简单小程序:
name=(a b c d e f g h) for i in ${name[*]} do echo $i done
要注意的是,首先书写不能像在C++和Java中那么随意,运算符号什么的一定要紧靠着写,譬如说上例中第一句写成:name = (a b c d e f g h ) 就会报错。
或者可以直接写成
for i in a b c d e f g h do echo $i done
2. While 循环
While循环的判断条件不能是像C++和Java直接是字符运算,譬如说 while [ $((i>0)) ],自己猜可能是C++里面的布尔值是int值改的,而脚本里布尔值和数值不能窜吧?
一个两重循环:
date=(10 2) for i in ${date[*]} do echo $i while [ 0 -le "$i" ]; do $((i--)) echo $i done done
备注网上找来的判断符号写法(网址:http://space.itpub.net/187805/viewspace-558085)
[]里面的条件判断。 1 字符串判断 str1 = str2 当两个串有相同内容、长度时为真 str1 != str2 当串str1和str2不等时为真 -n str1 当串的长度大于0时为真(串非空) -z str1 当串的长度为0时为真(空串) str1 当串str1为非空时为真 2 数字的判断 int1 -eq int2 两数相等为真 int1 -ne int2 两数不等为真 int1 -gt int2 int1大于int2为真 int1 -ge int2 int1大于等于int2为真 int1 -lt int2 int1小于int2为真 int1 -le int2 int1小于等于int2为真 3 文件的判断 -r file 用户可读为真 -w file 用户可写为真 -x file 用户可执行为真 -f file 文件为正规文件为真 -d file 文件为目录为真 -c file 文件为字符特殊文件为真 -b file 文件为块特殊文件为真 -s file 文件大小非0时为真 -t file 当文件描述符(默认为1)指定的设备为终端时为真 4 复杂逻辑判断 -a 与 -o 或 ! 非
注意:Shell的语法真心难。。譬如判断那里,如果写成:if [ "ls"="rs" ] 就是赋值,中间要有空!!要写成 if [ "ls" = "rs" ]。。。
3. if 判断
有了上面的基础,if判断就很简单了。需要注意的是判断句都要后面写个分号";",还有就是if的最后要写的反写的if: fi
month=10 day=5 if [ $month -eq 5 ]; then echo "MONTH YES" elif [ $day -eq 5 ]; then echo "DAY YES" else echo "NO" fi
4. 用&符号简单并行
将&符号写于执行语句的后面便可以将语句进行并行。
注意:要并行循环的话必须将&符号写在for里才行。
#!/bin/bash #函数,便于调用 sleep() { echo "Begin Date: $D" Sleep 10 echo "End Date: $D" } date=(1 2 3 4 5 6) for D in ${date[*]} do sleep& done #等待所有的进程结束 wait echo "FINISH"
结果可以看到基本上同时开始同时结束:
5. 读取文件夹下面列出的文件名字
这个只要用一个命令ls,但是要注意ls会把自己也列出来,具体为什么真心不清楚。
for X in ls $Date-*.dat #$Date是变量