系统相关
首页 > 系统相关> > 再读:Linux系统命令及Shell脚本实践指南(三)

再读:Linux系统命令及Shell脚本实践指南(三)

作者:互联网

再读:Linux系统命令及Shell脚本实践指南(三)

第十四章 测试和判断

$?可以看命令的返回值。

test和命令测试,

#方法一
kang@Mac :: ~/Downloads/PWN » test -e /var
kang@Mac :: ~/Downloads/PWN » echo $?
0
#方法二:
kang@Mac :: ~/Downloads/PWN 2 » [ -e /var ]
kang@Mac :: ~/Downloads/PWN » echo $?
0

if/else 判断

# 实例一
FILE="/var"
if [ -e $FILE ];then
echo "$FILE exist"
else
echo "$FILE not exist"
fi

#实例二
#!/bin/bash
echo -n "Hello world\n"
read SCORE
if [ "$SCORE" -lt 60 ];then
       echo "pass"
else
       echo "no pass"
fi

case 判断

#!/bin/bash
OS=$(uname -s)
case "$OS" in
Linux) echo "This is Linux" ;;
Darwin) echo "This is Mac Os" ;;
*) echo "Others system" ;;
esac

seq命令类似python中range,可以输出不同类型的序列

- Sequence from 1 to 10:
  seq 10

- Every 3rd number from 5 to 20:
  seq 5 3 20

- Separate the output with a space instead of a newline:
  seq -s " " 5 3 20

- Format output width to a minimum of 4 digits padding with zeros as necessary:
  seq -f "%04g" 5 3 20

第十五章 循环

for循环

#方法一
#!/bin/bash

for VAR in $(seq 1 10)
do
       echo "Loop $VAR times"
done

#方法二,类似C++
for ((i=0;i<=10;i++))#注意是两个括号
do
       echo "Loop $i times"
done

let命令,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量

#!/bin/bash
sum=0
for VAR in $(seq 1 10)
do
      let "sum+=VAR"
done
echo "In total: $sum"

select是一种菜单扩展循环方式,其语法和带列表的for循环非常类似,基本结构如下

#!/bin/bash
echo "Hello world\n"

select VAR in apple banana beer
do
      break
done
echo "You chose $VAR"
#效果
kang@Mac :: ~/Downloads/PWN » . ./shell.sh
Hello world

1) apple   2) banana  3) beer
?# 1
You chose apple

第十六章 函数

函数定义

#!/bin/bash
sayHello(){

       echo "HELLO"
}
echo "call sayHello"
sayHello

函数返回值利用

#!/bin/bash
FILE=/etc/notexistFIle
readFILE(){
       if [ -f $FILE ];then# 空格总是容易忽略
              return 0
       else
              return 1
       fi#fi也总是容易忘记
}
readFILE
if [ $? -eq 0 ];then# $?返回上一个命令的状态
       echo "$FILE exist"
else
       echo "$FILE not exist"
fi

有参数函数使用

#!/bin/bash
readFILE(){
       if [ -f $1 ];then
              return 0
       else
              return 1
       fi
}
readFILE
if [ $? -eq 0 ];then
       echo "$1 exist"
else
       echo "$1 not exist"
       echo "$2 lllll"
fi

计算一个数的多次方

#!/bin/bash
calculate(){
       VALUE=1
       for ((i=1;i<=$2;i++))
       do
              let "VALUE=VALUE*$1"
       done
}
calculate $1 $2#这里的参数要有声明,否则会报错
echo "In total: $VALUE"

第十七章 重定向

所谓“重定向”,就是将原本应该从标准输入设备(键盘)输入的数据,改由其他文件或设备输入;或将原本应该输出到标准输出设备(显示器)的内容,改而输出到其他文件或设备上。

 

I/O重定向可以将任何文件、命令、脚本、程序或脚本的输出重定向到另外一个文件、命令、程序或脚本。

image-20211217153500912

文件标识符重定向中很重要的一个概念

Linux使用0到9的整数指明了与特定进程相关的数据流,系统在启动一个进程的同时会为该进程打开三个文件:标准输入(stdin)、标准输出(stdout)、标准错误输出(stderr),分别用文件标识符0、1、2来标识。
如果要为进程打开其他的输入输出,则需要从整数3开始标识。

标准输出覆盖重定向其实是默认将文件标识符为1的内容重定向到指定文件中

kang@Mac :: source/go/project » ls -l > qwe.txt
#等同于 ls -l 1> qwe.txt
kang@Mac :: source/go/project » cat qwe.txt
total 24
drwxr-xr-x@ 3 a staff     96 10 27 10:59 handler
-rwxr-xr-x@ 1 a staff  10887 10 27 10:59 main.go
-rw-r--r--  1 a staff      0 12 17 16:55 qwe.txt
drwxr-xr-x@ 4 a staff    128 10 27 10:59 static
drwxr-xr-x@ 5 a staff    160 10 27 10:59 templates
drwxr-xr-x@ 3 a staff     96 10 27 10:59 upload

**标识输出重定向:>&**

标识输出重定向的作用是将一个标识的输出重定向到另一个标识的输入。

使用场景,重定向错误信息

kang@Mac :: source/go/project 130 » find / -name *.txt > qwe.txt
find: /usr/sbin/authserver: Permission denied
find: /Library/Application Support/Apple/ParentalControls/Users: Permission denied
#错误信息没有写入到文件里面,仍然是显示在页面。
kang@Mac :: source/go/project 130 » cat qwe.txt
kang@Mac :: source/go/project »

使用标识输出重定向:>&

kang@Mac :: source/go/project » find / -name *.txt > qwe.txt 2>&1
^C
kang@Mac :: source/go/project 130 » cat qwe.txt
find: /usr/sbin/authserver: Permission denied
find: /Library/Application Support/Apple/ParentalControls/Users: Permission denied

标准输入重定向:<

标准输入重定向可以将原本应由从标准输入设备中读取的内容转由文件内容输入,也就是将文件内容写入标准输入中。

kang@Mac :: source/go/project 255 » sort
qwer
adsf
edc
#标准输入进行了排序 结束control+D
adsf
edc
qwer
#使用标准输入重定向:< 来重定向排序,交给sort处理
kang@Mac :: source/go/project » sort < qwe.txt
ads
asdp
dsnt
jiup

 

标签:10,Shell,系统命令,kang,echo,Mac,Linux,go,重定向
来源: https://www.cnblogs.com/OutBxx/p/15714037.html