【Shell】Linux Shell脚本基础命令

时间:2022-04-03 15:44:27

因为只是要写个脚本下数据,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"

 

结果可以看到基本上同时开始同时结束:

【Shell】Linux Shell脚本基础命令

5. 读取文件夹下面列出的文件名字

这个只要用一个命令ls,但是要注意ls会把自己也列出来,具体为什么真心不清楚。

for X in ls $Date-*.dat   #$Date是变量