linux常用命令_shell script

当shell script没有执行x权限时,需要使用sh来进行调用

如果拥有该权限可以直接./shell.sh运行

#######################################################

shell script 整体格式

1.

在第一行

#!/bin/bash

必须以该段为开头,来宣告该脚本片段的语法,才能在程序被执行时,加载bash的相关环境配置文件

2.

将填写关于程序内容的相关批注,譬如,内容与功能,版本信息,作者与联系方式,创建日期,历史记录等等

3

环境变量的宣告

当程序进行时,会加载宣告的环境变量里的外部指令,在程序的执行中可以直接使用外部指令,而不用使用绝对路径来调用

4

程序编写部分

5

将结果返回

也就是在程序执行后输入#?显示的结果就是我们编写程序的传回结果

#####################################################

计算公式

val = $((计算内容))

当需要计算小数点的值时可以经过bc的处理显示

echo "3.3 * 5" | bc

######################################

计算 pi 方法

echo "scale=${10}; 4*a(1)"|bc -lq

显示小数点后十位pi

############################################################

当程序直接运行bash程序时,其实是会新建一个子bash程序来执行,所以如果当bash的执行脚本更改了当前的变量,在退出程序后会被还原,如果需要使用脚本内的变量在退出程序时不还原,可以使用

source ./shell.sh

来执行程序

################################################################

test

常用的测试功能,来判断给定条件的结果

-e fileName判断该名字类型的文件是否存在

-f fileName 判断该名字目标是否为文件

-d fileName 判断文件名目标是否为目录

-b fileName 判断文件名是否为一个block device装置

-c fileName 判断是否存在且为character device装置

-S fileName 判断是否存在且为一个Socket文件

-p fileName 该文件是否存在且为一个FIFO文件

-L  fileName 该文件是否存在且为一个快捷方式

//////////////////////////////////////////////////////////////////////

文件的权限检测

-r fileName 判断文件是否存在可读权限

-w fileName 判断文件名是否存在可写的权限

-x 判断文件名是否存在可执行的权限

-u 判断该文件名是否存在且具有SUID的属性

-g 判断该文件名是否存在切具有SGID的属性

-k 判断该文件名是否存在且具有Sticky bit 的属性

-s 判断该文件名是否存在且为非空白文件

///////////////////////////////////////////////////////////////////////////

两个文件之间的比较

test file1 -nt file2

-nt newer than 判断file1是否比file2新

-ot older than 判断file1是否比file2旧

-ef 判断 file1 与 file2是否为同一文件,可用在判断hard link的判定上, 主要意义判断是否指向同一个inode

#########################################################

两个整数之间的判定

test n1 -eq n2

-eq 两数值相等 equal

-ne 两数值不等 not equal

-gt n1 大于 n2 greater than

-lt n1小于n2 less than

-ge n1大于等于n2 greater than or equal

-le n1 小于等于 n2 less than or equal

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

字符串数据判断

test -z string 判断字符串是否为空, 为空时返回true

test -n string 判断字符串是否非为空,当字符串非空时返回true(默认)

test str1 == str2 判断str1是否等于str2,若相等,则回传true

test str1 != str2 判断str1是否不等于str2,若相等,则传回false

///////////////////////////////////////////////////////////////////////////////////////////////////////////////

多重条件判定

test -r file1 -a -x file1 

-a 为and,且的意思当file1存在可读和可执行权限时,才会回传true

-o 为or, 或的意思,当两个条件满足任意一条时都能成立

! 反相状态, 如 test ! -r file1 当file1不存在读取权限的时候,才返回true

###########################################################

利用判断符号[]

[ "$HOME" == "$MAIL" ]

在判断时,判断的参数的读取将是以空格为边界,所以必须要在两边参数和判断符号前后添加空格

变量最好用双引号包裹

常量最好用单引号包裹

#############################################################

在shell script 里

$0 表示当前文件路径

$1 表示执行该脚本的第一个参数

$2 为第二个参数

$#:   表示接的参数的个数

$@: 表示 "$1","$2"查看当前参数的内容,将用双引号括起来

$*    表示

############################################

shift 1

表示略过参数

如传入参数为 0,1,2,3

$0 为0

shift 1 进行偏移后

$0 为1

#####################

条件判断

if [条件判断]; then

fi

多个条件可以使用&& ||来区分

多重条件判断

if[条件判断];then

elif [条件判断]; then

else

fi

#######################################################

case $变量名称in

条件1)

;;

条件2)

;;

*)  默认执行

;;

esac

#############################################################

函数

function fname(){

}

需要写在执行之前

####################################################

循环

while[条件判断]  当条件成立时,进行循环

do

done

///

until[条件判断]  当条件不成立时,进行循环

do

done

////

for var in con1 con2 con3

do

done

会一次将con1,con2,con3的值赋给var

例如将之前查询结果进行遍历

例如

users = $(cut -d ':' -fl /etc/passwd)

for username in ${users}

do

     id ${username}

done

如果想循环一个连续数字

for val in $(seq 1 100)

do

done

类似C语言的for

for((初始;限制条件;步阶))

do

done

####################################################################

debug相关

sh [-nvx] scripts.sh

-n: 查询当前是否存在语法问题

-v: 在执行前,将scprts的内容输出到屏幕上

-x: 将使用到的scrpit内容显示到屏幕上

猜你喜欢

转载自blog.csdn.net/qq_22478401/article/details/81530295