Linux命令:bash脚本编程

bash脚本编程简介:

此文假定你没有任何关于脚本或一般程序的编程知识, 但是如果你具备相关的知识, 那么你将很容易就能够达到中高级的水平. . .
你可以把此文作为参考, 自学手册, 或者是关于shell脚本技术的文档。

介绍内容包括:

A:变量、变量类型

B:条件判断

C:算术运算

D:

E:

F:

G:

A.bash变量类型:

1)本地变量:(局部变量)

set VARNAME=VALUE: 作用域为整个bash进程;

2)局部变量:

local VARNAME=VALUE:作用域为当前代码段;

3)环境变量:作用域为当前shell进程及其子进程;

export VARNAME=VALUE

eg1: VARNAME=VALUE    赋值

export VARNAME    “导出”

4)位置变量:

$1, $2, ...

5)特殊变量:

$?: 上一个命令的执行状态返回值;

程序执行,可能有两类返回值:

返回值1.程序执行结果

返回值2.程序状态返回代码(0-255)

0:正确执行

1-255:错误执行,1,2,127系统预留;

eg1: #ls /etc/    执行命令

#$?  :0   “执行状态返回值”

6)输出重定向:

>    覆盖重定向

>>    追加重定向

2>    错误重定向

2>>    错误追加重定向

&>    追加及错误同时重写向

eg1: #ls /etc/ >/dev/null | echo $?  >/dev/null软件设备,数据黑洞

7)撤消变量:

unset x  撤消变量   unset $x  撤消变量中的值

unset VARNAME

eg1: [[email protected] ~]# NAME=Tom    定义变量

[[email protected] ~]# echo $NAME    显示变量

Tom
    [[email protected] ~]# unset NAME
    [[email protected] ~]# echo $NAME    撤消变量后变量不显示

[[email protected] ~]#

8)查看当shell中变量:   set    包含所有环境变量和本地变量

eg1:查看当前shell中的环境变量:  printenv  或env  或export

eg2:

[[email protected] ~]# ANIMALS=pigs
    [[email protected] ~]# ANIMALS=$ANIMALS:goat
    [[email protected] ~]# echo $ANIMALS

pigs:goat

[[email protected] ~]# echo $PATH

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[[email protected] ~]# echoPATH=$PATH:/usr/local/apache/bin

PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/apache/bin


******************************************************************************************

B.条件判断:

    1)命令格式:

如果用户不存在

添加用户,给密码并显示添加成功;

否则

显示如果已经没在,没有添加;


    2)判断条件

1.条件测试类型: 整数测试    字符测试    文件测试

2.条件测试的表达式:[expression ]  [[expression ]]  testexpression

3.整数比较:

-eq:  两个整数是否相等;          equal

-ne:  两个整数是否不等;不等,为真;相等,为假;  not equal

-gt:  一个数是否大于另一个数;大于,为真;否则,为假; greater than

-lt:  一个数是否小于另一个数;小于,为真;否则,为假; less than

-ge:  大于或等于       greater than or equal

-le: 小于或等于       less than or equal

eg1: [ $A -eq $B ]  每个字符间必须有空格

3.语句的间逻辑关系:

逻辑与: &&

第一个条件为假时,第二个条件不用再判断,最终结果已经有;

第一个条件为真时,第二个条件必须得判断;

逻辑或: ||

第一个条件为真或为假时,第二个条件必须得判断;

eg1:如果用户user11不存在,就添加用户user11

! id user11 && useradd user11 或  id user11 || useradd user11

eg2: 如果/etc/inittab文件的行数大于500,就显示好大的文件;

[ `wc -l /etc/inittab | cut -d‘ ‘ -f1` -gt500 ] && echo "Large files."

4.变量名称规则:

1)只能包含字母、数字和下划线,并且不能数字开头;

2)不应该跟系统中已有的环境变量重名;

3)最好做到见名知义;

如果用户不存在,添加并且给密码;否则,显示其已经存在;

! id user1 &> /dev/null && useradd user1&& echo "user1" | passwd --stdin user1 || echo "user1 exists."

  实例B一:添加3个用户user1, user2,user3;但要先判断用户存在否,不存在则再添加;

    添加完成后,显示系統中总共有几个用户;

#!/bin/bash

! id user1 &> /dev/null && useradd user1 || echo "user1 exists."

! id user2 &> /dev/null && useradd user2 || echo "user2 exists."

! id user3 &> /dev/null && useradd user3 || echo "user3 exists."

USERS=`wc -l /etc/passwd | cut -d: -f1`

echo "$USERS users." 


    以下使用IF语句

#!/bin/bash

NAME=user110

if id $NAME &> /dev/null;then  使用命令执行状态结果,要直接执行此命令,一定不能引用

echo "$NAME exists."

else

useradd $NAME

echo $NAME | passwd --stdin $NAME &> /dev/null

echo "Add $NAME finished."

fi

echo "`wc -l /etc/passwd | cut -d: -f1` users."

提示:

1.“引用”一个命令的执行结果,要使用命令引用;

比如: RESAULTS=`wc -l /etc/passwd | cut -d: -f1`;

2.使用一个命令的执行状态结果,要直接执行此命令,一定不能引用;

比如: if id user1一句中的id命令就一定不能加引号;

3.想把一个命令的执行结果赋值给某变量,要使用命令引用,

比如USERID=`id -u user1`;

4.想把一个命令的执行状态结果保存下来,并作为命令执行成功与否的判断条件,则需要先执行此命令,而后引用其状态结果,如

id-u user1

RETVAL=$?

此句绝对不可以写为:RETVAL=`id -u user1`;

  实例B二:给定一个用户:

1、如果其UID为0,就显示此为管理员;

2、否则,就显示其为普通用户;

#!/bin/bash

NAME=user1

USERID=`id -u $NAME`

# USERID=`grep "user1:" /etc/passwd | cut -d: -f3`  与上条语句同样功能

if [ $USERID -eq 0 ]; then  * then为同行前面要有;若then在下一行可不加;

echo"Admin user."

else

echo"common user."

fi

  实例B三:if语句条件差异


`id -u$NAME` 命令执行的结果:   if [ `id -u $NAME` -eq0 ]; then *

id $NAME 命令状态的结果,即执行是否成功:   if id $NAME; then *

  实例B三:给定一个用户,获取其密码警告期限;再判断用户密码使用期限是否已小于警告期限;

提示:计算方法,最长使用期限减去已经使用的天数即为剩余使用期限;

如果小于,则显示“Warning”;否则,就显示“OK”。

圆整:丢弃小数点后的所有内容

#!/bin/bash

#

WARNING=`grep "user1:"/etc/shadow | cut -d: -f6`

S=`date +%s`

T=`expr $S/86400`

LONG=`grep"^student" /etc/shadow | cut -d: -f5`

N=`grep"^student" /etc/shadow | cut -d: -f3`

SY=$[$L-$[$T-$N]]

if [ $SY -lt $W ]; then

echo ‘Warning‘

else

echo ‘OK‘

fi

  实例B四:判定命令历史中历史命令的总条目是否大于1000;

如果大于,则显示“Some command will gone.”;否则显示“OK”。

shell中如何进行算术运算:

A=3

B=6

1、let 算术运算表达式

letC=$A+$B

2、$[算术运算表达式]

C=$[$A+$B]

3、$((算术运算表达式))

C=$(($A+$B))

4、expr 算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用

C=`expr$A + $B`

时间: 2024-12-11 11:50:00

Linux命令:bash脚本编程的相关文章

linux命令:脚本编程知识点${#VARNAME} ${VARNAME#* } . FILENAME 读取文档内容

脚本编程知识点: * FILE=/usr/local/src TEST=${FILE#*/}:$TEST结果为usr/local/src, 以/为关键字,删除从左边数第一个/及关键字/左边的所有字符串. DEST=${FILE##*/}:$DEST结果为src,以/为关键字,删除最后一个关键字/及关键字/左边的所有字符串. 从左往右时,*号需在关键字左边 DOTEST=${FILE%/*}:$DOTEST结果为/usr/local,以/为关键字,删除从右边数第一个/及关键字/右边的所有字符串.

谢烟客---------Linux之bash脚本编程---if补充和for循环

bash:过程式编程,为了完成更复杂的任务,支持顺序执行.选择执行.循环执行 顺序执行:从左而右,依次执行命令. 选择执行:依据condition(条件)的执行状态结果,选择执行不同的代码片段. 循环执行:依据condition(条件)的执行状态结果,决定是否进入循环. condition: ture: 表示条件状态结果为0 false: 表示条件执行状态结果非0 if 单分支.双分支.多分支.嵌套if语句 1.单分支结构 if condition; then     if-ture fi 2.

谢烟客---------Linux之bash脚本编程---用户交互

系统管理部分一: 分区.创建.查看.调整.挂载.文件系统的结构.硬链接.软链接 脚本"语法错误"非逻辑错误检测: # bash -n script.sh 单独执行,脚本执行每个代码 # bash -x script.sh +        程序在执行 没有+    程序过程中应该输出的信息 脚本的格式 +++++++++++++++++++++++++++++++++非格式,用于分割++++++++++++++++++++++++++++++++++ #!/bin/bash     #

谢烟客---------Linux之bash脚本编程---选择执行

编程风格 过程式编程,目的解决问题 指令组织数据,指令的堆砌 为了完成复杂的任务 顺序执行:遍历的方式执行,逐个运行 选择执行:有一种选择标准,结果只能有一种选择,只执行某些 代码片段 循环执行:对一类对象逐个运行相同的运算,类似于 拉磨 的方式,某些代码连续执行多次 对象式编程: 数据为中心 程序执行的方式 编译:先翻译后执行,先将高级语言转换为目标代码:C,java程序 --> 编译 --> 目标代码 解释:边翻译边执行,为避免语法.逻辑等错误,一般先进行语法检查 Shell,java,p

Linux系统裁剪之二(Bash脚本编程之十二)

Linux系统裁剪之二(Bash脚本编程之十二) 系统函数库 ·Linux系统的启动流程     1,POST(加电自检) 计算机本身并不会执行程序,它只是一堆破铜烂铁,但是它可以在开机的时候先去载入一段程序,系统在刚刚启动的时候能够实现将某个ROM芯片中的程序映射到CPU能够寻址的地址空间中去,并且让CPU能够执行其中的指令,这些指令大部分都是用来做系统检测的,当检测完成后,如果系统中所有的基本硬件和核心硬件都没有问题的话,接下来就会根据BIOS中设定的系统启动次序(Boot Sequence

Linux学习笔记--bash脚本编程之二、条件判断

 bash脚本编程之二.条件判断 条件判断: 如果用户不存在 添加用户,给密码并显示添加成功: 否则 显示用户已存在,没有添加 bash中如何实现条件判断? 整数测试 字符测试 文件测试 条件测试的表达式:     [expression]     [[expression]]     test expression 整数比较: -eq:测试两个整数是否相等:比如 $A -eq $B     -ne:测试两个整数是否不等:不等,为真:相等,为假:     -qt:测试一个数是否大于另一个数:大于

Linux学习笔记--bash脚本编程之一变量、变量类型

bash脚本编程之一变量.变量类型 shell编程: 编译器,解释器 编程语言:机器语言.汇编语言.高级语言 静态语言:编译型语言 强类型(变量)语言 事先转换成可执行格式 C.C++.JAVA.C# 动态语言:解释型语言       on the fiy                                   弱类型 边解释边执行 ASP.ASP.net.PHP.shell.Python.perl 面向过程:shell.C   面向对象:JAVA.Python .Perl.C++

bash脚本编程之条件判断、条件测试

脚本编程: 编程面向过程有如下几种执行方式 顺序执行 选择执行:  如 if, case 循环执行:  如 for, while, until bash的变量类型: 本地变量 set VAR_NAME=value 设置变量赋值 如: set User=Centos unset VAR_NAME 撤消变量赋值 如: unset User=Centos ${VAR_NAME} 作用范围:当前shell进程: 局部变量 local VAR_NAME=value 设置变量赋值 unset VAR_NAM

《高级Bash脚本编程指南》十年来首次修订

新年伊始,开源慕课的知识库上线了.初期提供了<Linux命令大全/Bash 参考><高级Bash脚本编程指南>两个系列.其他资料正将陆续上线. 其中,<高级Bash脚本编程指南>对于Shell学习者来说,是一本神一样的书籍. 它的原作者是Mendel Cooper,英文名叫<Advanced Bash-Scripting Guide>发表在http://tldp.org/ 上,是一本免费的书籍. 有人说,学习Unix/Linux,有座山叫shell编程,你总