Shell我用 LinuxLinux

shell 笔记(Mac 版)

2017-11-29  本文已影响273人  Thinkando
NO. 目录
1 shell优点
2 基本格式
3 输出程序 echo
4 shell 变量
5 引号
6 循环
7 循环控制
8 条件判断
9 算数运算
10 逻辑运算符
11 函数
12 字符窜操作
13 数组
14 重定向
15 其他命令

1. shell优点

  1. 语法和结构通常比较简单
  2. 学习和使用通常比较简单
  3. 通常不需要编译
  4. 适合处理文件和目录之类的对象

2. 基本格式

#!/usr/bin/env bash
echo "hello world"
image.png

3. 输出程序 echo

#!/usr/bin/env bash
echo "hello world"
echo hello world

text="hello world"
echo $text

echo -e "hello \nworld"  #输出并且换行

echo "hello world" > a.txt  #重定向到文件

echo `date`  #输出当前系统时间
image.png

4. shell 变量

1、只能使用数字,字母和下划线,且不能以数字开头
2、变量名区分大小写
3、“=”前后不能有空格

#!/usr/bin/env bash
echo "hello world"
myText="hello world"
muNum=100
echo $myText
echo $muNum

echo myText
echo muNum
image.png
$? 接收上一条命令的返回状态码返回状态码在0-255之间
$$ 获取当前shell的进程号(PID)(可以实现脚本自杀)(或者使用exit命令直接退出也可以使用exit [num])
$! Shell最后运行的后台Process的PID
$- 使用Set命令设定的Flag一览
$* 所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@ 所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$# 添加到Shell的参数个数
$0 Shell本身的文件名
$1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。
#!/usr/bin/env bash
printf "The complete list is %s\n" "$$"
printf "The complete list is %s\n" "$!"
printf "The complete list is %s\n" "$?"
printf "The complete list is %s\n" "$*"
printf "The complete list is %s\n" "$@"
printf "The complete list is %s\n" "$#"
printf "The complete list is %s\n" "$0"
printf "The complete list is %s\n" "$1"
printf "The complete list is %s\n" "$2"
image.png

5. 引号

image.png

6. 循环

#!/usr/bin/env bash
# 方法一
for ((i=0;i<10;i++))
do
printf $i
done
echo

# 方法二
for i in 0 1 2 3 4 5 6 7 8 9
do
printf $i
done
echo

# 方法三
for i in {0..9}
do
printf $i
done
image.png
#!/usr/bin/env bash
COUNTER=0
while [ $COUNTER -lt 5 ]
do
    COUNTER=`expr $COUNTER + 1`
    echo $COUNTER
done

echo '请输入。。。'
echo 'ctrl + c 即可停止该程序'
while read NUM
do
    echo "Yeah! great NUM the $NUM"
done
image.png

7. 循环控制

break  #跳出所有循环
break n  #跳出第n层f循环
continue  #跳出当前循环

8. 条件判断

参数 解释
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
-eq 等于
-ne 不等于
#!/usr/bin/env bash
a=10
b=20
if [ $a -eq $b ]
then
   echo "true"
else
   echo "false"
fi

if [ $a -ne $b ]
then
   echo "true"
else
   echo "false"
fi

if [ $a -gt $b ]
then
   echo "true"
else
   echo "false"
fi

if [ $a -lt $b ]
then
   echo "true"
else
   echo "false"
fi

if [ $a -ge $b ]
then
   echo "true"
else
   echo "false"
fi

if [ $a -le $b ]
then
   echo "true"
else
   echo "false"
fi
image.png

例如[ $num1 -gt $num2 ]或者test $num1 -gt $num2

#!/usr/bin/env bash
num1=4
num2=5
str1=Alice
str2=Bob
if [ $num1 -gt $num2 ]
then
echo $num1 large than $num2
else
echo $num1 lower than $num2
fi

if [ -z $str1 ]
then
echo str1 is empty
else
echo str is not empty
fi
image.png
#!/usr/bin/env bash
a=10
b=20
if [ $a == $b ]
then
   echo "true"
fi


if [ $a == $b ]
then
   echo "true"
else
   echo "false"
fi


if [ $a == $b ]
then
   echo "a is equal to b"
elif [ $a -gt $b ]
then
   echo "a is greater than b"
elif [ $a -lt $b ]
then
   echo "a is less than b"
else
   echo "None of the condition met"
fi
image.png
a|b a或者b
* 匹配任意长度的任意字符
? 匹配任意单个字符
[a-z] 指定范围内的任意单个字符
#!/usr/bin/env bash

num=10
case $num in
    1)
        echo 1
            ;;
    2)
        echo 2
            ;;
    10)
        echo 10
            ;;
    *)
        echo somethin else
        ;;
esac
image.png

9. 算数运算

#!/usr/bin/env bash
echo "Hello World !"
a=3
b=5
val=`expr $a + $b`
echo "Total value : $val"

val=`expr $a - $b`
echo "Total value : $val"

val=`expr $a \* $b`
echo "Total value : $val"

val=`expr $a / $b`
echo "Total value : $val"
image.png
其他运算符 含义
% 求余
== 相等
= 赋值
!= 不相等
!
-o
-a
#!/usr/bin/env bash
a=3
b=5
val=`expr $a / $b`
echo "Total value : $val"

val=`expr $a % $b`
echo "Total value : $val"

if [ $a == $b ]
then
   echo "a is equal to b"
fi
if [ $a != $b ]
then
   echo "a is not equal to b"
fi
image.png

10. 逻辑运算符

-a
-o
#!/usr/bin/env bash

num1=10
num2=20
num3=15
if [ $num1 -lt $num3 -a $num2 -gt $num3 ]
then
        echo $num3 is between 10 and 20
else
        echo something else
fi
image.png
#!/usr/bin/env bash

num1=10
num2=20
num3=15
if [[ $num1 -lt $num3 && $num2 -gt $num3 ]]
then
        echo $num3 is between 10 and 20
else
        echo something else
fi
image.png

11. 函数

#!/usr/bin/env bash
# 定义一个没有返回值的函数,然后调用该函数
sysout(){
    echo "hello world"
}

sysout

# 定一个有返回值的函数,调用该函数,输出结果
test(){

    aNum=3
    anotherNum=5
    return $(($aNum+$anotherNum))
}
test
result=$?
echo $result
image.png
#!/usr/bin/env bash
# 定义了一个需要传递参数的函数
test(){
    echo $1  #接收第一个参数
    echo $2  #接收第二个参数
    echo $3  #接收第三个参数
    echo $#  #接收到参数的个数
    echo $*  #接收到的所有参数
}
test aa bb cc
image.png
#!/usr/bin/env bash
read -p "Enter your name:" VAR_NAME
echo "hello $VAR_NAME, welcome to my program"
read -t 10 -p "enter your name:" VAR_NAME
echo "hello $VAR_NAME, welcome to my program"
read  -s  -p "Enter your password: " pass
echo "hello $VAR_NAME, your password is $pass"
image.png
declare [-aixr] variable
-i: 把变量定义为整数
-a: 把变量定义为数组
-x: 把变量变成环境变量
-r: 可读变量
ChengkaideMacBook-Pro:~ chengkai$ sum=100+300+50
ChengkaideMacBook-Pro:~ chengkai$ echo $sum
100+300+50           # 文字类型的变量属性无法相加
ChengkaideMacBook-Pro:~ chengkai$ declare -i sum=100+300+50 # -i把变量定义为整数数字
ChengkaideMacBook-Pro:~ chengkai$ echo $sum
450

12. 字符窜操作

str1="Hello"
str2="World"

echo ${#str1} # 输出字符窜长度
echo ${str1:0:3} # 截取字符窜
echo $str1" "$str2 # 字符窜拼接
image.png

13. 数组

#!/usr/bin/env bash
array=(1 2 3 4 5)  #定义数组
array2=(aa bb cc dd ee)  #定义数组
value=${array[3]}  #找到某一个下标的数,然后赋值
echo $value  #打印
value2=${array2[3]}  #找到某一个下标的数,然后赋值
echo $value2  #打印
length=${#array[*]}  #获取数组长度
echo $length
image.png

14. 重定向

命令 说明
command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。
/dev/null 禁止输出
$echo result > file  #将结果写入文件,结果不会在控制台展示,而是在文件中,覆盖写
$echo result >> file  #将结果写入文件,结果不会在控制台展示,而是在文件中,追加写
echo input < file  #获取输入流
$ command > file 2>&1 # 将 stdout 和 stderr 合并后重定向到 file,
$ command < file1 >file2 # command 命令将 stdin 重定向到 file1,将 stdout 重定向到 file2。

15. 其他命令

#!/usr/bin/env bash
echo `date +%Y-%m-%d-%H:%M:%S`
echo `date +%s`
bash test.sh &
nohup test.sh & 

参考文献

  1. http://www.jianshu.com/p/71cb62f08768
  2. http://blog.csdn.net/u011204847/article/details/51184883
上一篇下一篇

猜你喜欢

热点阅读