Shell脚本基础

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本基础相关的知识,希望对你有一定的参考价值。


Shell脚本


规范Shell脚本的一般组成

#! 环境声明(Sha-Bang)

# 注释文本

可执行代码


设置变量注意事项

 若指定的变量名已存在,相当于为此变量重新赋值

 等号两边不要有空格

 变量名由字母/数字/下划线组成,区分大小写

 变量名不能以数字开头,不能用关键字和特殊字符

基本格式

 引用变量值:$变量名

 查看变量值:echo $变量名、echo ${变量名}


环境变量

  一般为大写,用来设置用户/系统环境

  PWD  PATH  USER  LOGNAME 

  SHELL HOME 


自定义变量

  用户自主设置 使用


例子


#!/bin/bash

echo $0

echo $1

echo $2

echo $3

echo ${10}

echo $#

echo $*

echo [email protected]


执行


# sh ./1.sh a b c d e f 

./1.sh #  $0为脚本名称

a #  $1为脚本第一个参数

b #  $2为脚本第二个参数

c #  $3为脚本第三个参数

#  $10此处指出为无值状态 如果是"${10}"会将无值赋予变为空值

6 #  $#给脚本参数的的个数

a b c d e f #  $*列出艘所有参数

a b c d e f #  [email protected]列出艘所有参数


#!/bin/bash

cat -n $1 | head -$2   # 查看某文件的前2行


位置变量

 在执行脚本时提供的命令行参数(非交互式传值)

 $0  $1  $2  $3  ${10}    

 #无值 不等于 空值 

 #空值对于变量是属于有值的状态 无值对于变量是属于无值状态


预定义变量

  用来保存脚本程序的执行信息

直接使用这些变量

不能直接为这些变量赋值

  $#  $*  [email protected]   

  $? :执行程序退出后的状态值,0表示正常,其他值异常


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


运算 

  

# expr 10 / 3 #除法

# 3

# expr 10 \* 3 #乘法   *默认为统配符\还原一下

# 30

# expr 1 + 2 #加法

# 3

# expr 3 - 1 #减法

# 2

# expr 10  %  3 #取余

# 1


\ #反斜杠将后一个变量变为纯字符


 `` #相当于 $() #将命令执行后的结果输出

# mkdir $(date +%F)date

   or

# mkdir `date +%F`date


‘‘ #单引号内安纯字符输出


"" #双引号保留其中变量输出


useradd  $user  &> /dev/null        # $> /dev/null  将输出丢弃(不显示)


&& #逻辑 与

|| #逻辑 或

! #逻辑 否


常用的测试选项


检查文件状态

-e:文档存在为真

-d:文档存在且为目录为真

-f:文档存在且为文件为真

-r:文档存在且有读取权限为真

-w:文档存在且有写入权限为真

-x:文档存在且有执行权限为真


比较整数大小(e=equal  g=greater  l=less  n=not t=than)

-gt:大于

-ge:大于等于

-eq:等于

-ne:不等于

-lt:小于

-le:小于等于


字符串比对

== #相等

!= #不相等


重定向输出


覆盖:    

    >:正确输出

    2>:错误输出

    &>:错误与正确输出

追加:

    >>:正确输出

    2>>:错误输出

    &>>:错误与正确输出


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


if [条件测试1] ; then

      命令序列xx

 elif [条件测试2] ; then

      命令序列yy

 else

      命令序列zz

 fi


在 server0 上创建 /root/foo.sh 脚本

1)当运行/root/foo.sh redhat,输出为fedora

2)当运行/root/foo.sh fedora,输出为redhat

3)当没有任何参数或者参数不是 redhat 或者

fedora时,其 错误 输出产生以下信息: 

  /root/foo.sh  redhat|fedora


初步写法:


#!/bin/bash

if [ $# -eq 0 ];then

echo ‘/root/foo.sh redhat|fedora‘

exit

elif [ $1 == redhat ];then

echo fedora

exit

elif [ $1 == fedora ];then

echo redhat

exit

else

echo ‘/root/foo.sh redhat|fedora‘

fi


改进后:


#!/bin/bash

if [ "$1" == redhat ];then # $1在没有赋值时代表 无值 状态无法进行对比 会报错 

echo fedora # "$1"会在没有赋值时 给其赋予空值 属于有值状态可以进行对比

exit # 由$1变为"$1"可减少一条空值判断

elif [ "$1" == fedora ];then

echo redhat

exit

else

echo ‘/root/foo.sh redhat|fedora‘ >&2 # >&2 将echo的输出定义为错误输出

exit 1 #退出并将返回值改为1----echo $? 为1

fi


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


for循环结构


循环结构:将反复执行的语句,循环去执行


 for 变量名 in   值列表

 do

     命令序列

 done


编写一个批量添加用户脚本

  在 server0 上创建 /root/batchusers 脚本

1 此脚本要求提供用户名列表文件作为参数

2 如果没有提供参数,此脚本应该给出提示

Usage:/root/batchusers,退出并返回相应值

3 如果提供一个不存在的文件,此脚本应该给出提示 

Input file not found,退出并返回相应值

4 新用户的登录Shell为 /bin/false,无需设置密码


 #!/bin/bash

 if [ $# -eq 0 ];then

    echo ‘Usage: /root/batchusers‘ >&2

    exit 1

 fi

 if [ -f $1 ];then

    for  A  in $(cat $1)

   do

    useradd -s /bin/false $a

    echo $A创建成功

   done

  else

    echo ‘Input file not found‘ >&2

    exit 1.

 fi

以上是关于Shell脚本基础的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本基础!

Shell脚本应用(shell脚本基础与shell变量)

shell脚本基础知识详解

项目09 Shell脚本基础

shell脚本基础

Shell脚本 Shell脚本基础 使用Shell变量