码迷,mamicode.com
首页 > 系统相关 > 详细

shell编程基础

时间:2018-06-12 22:28:52      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:info   exist   基础   表达   下划线   ESS   循环   input   cti   

1.1 shell编程基础

技术分享图片

 

1.1.1 Shell编程所需的基础知识

熟练使用vim编辑器

熟悉SSH终端

熟练掌握linux常用命令

数量掌握linux正则表达式及三剑客命令(grep、sed、awk)

/etc/init.d/functions

1.1.2 变量分类

用一个固定的字符串,替代更多更复制的内容

局部变量(普通变量):

必须以字母或下划线开头  字母、数字、下划线组成

规范的变量名写法定义:见名知意

驼峰语法:首个单词字母小写,其余单词字母大写 oldboyAgeSex=1

[root@oldboy files]# week=6

[root@oldboy files]# echo $week

6

 全局变量(环境变量):

大写,linux里面哪里都可以用

在创建他们的Shell及其派出来的子Shell中使用

 

与用户环境变量有关的文件  目录

全局环境变配置文件

/etc/profile     /etc/bashrc      /etc/profile.d用户登录到系统 会运行这个目录下面的脚本 以.sh结尾

用户环境变量配置文件

~/,bash_profile       ~/.bashrc      

 

特殊变量:

$   数字

$0  脚本名字

$1  命令行脚本的第1个参数 

$2  命令行脚本的第2个参数 

$3  命令行脚本的第3个参数 

$4  命令行脚本的第4个参数 

$#  脚本的参数的数量

$?  上一个命令的执行结果  0正确  非0错误       

 

#!bin/bash

a=$1

b=$2

 

awk -vnum1=$a -vnum2=$b ‘BEGIN{print num1+num2}‘

awk -vnum1=$a -vnum2=$b ‘BEGIN{print num1-num2}‘

awk -vnum1=$a -vnum2=$b ‘BEGIN{print num1*num2}‘

awk -vnum1=$a -vnum2=$b ‘BEGIN{print num1/num2}‘

[root@oldboy files]# sh num.sh 10 20

30

-10

200

0.5

1.1.1 Shell编程所需的基础知识

熟练使用vim编辑器

熟悉SSH终端

熟练掌握linux常用命令

数量掌握linux正则表达式及三剑客命令(grep、sed、awk)

/etc/init.d/functions

1.1.2 变量分类

用一个固定的字符串,替代更多更复制的内容

局部变量(普通变量):

必须以字母或下划线开头  字母、数字、下划线组成

规范的变量名写法定义:见名知意

驼峰语法:首个单词字母小写,其余单词字母大写 oldboyAgeSex=1

[root@oldboy files]# week=6

[root@oldboy files]# echo $week

6

 

全局变量(环境变量):

大写,linux里面哪里都可以用

在创建他们的Shell及其派出来的子Shell中使用

 

与用户环境变量有关的文件  目录

全局环境变配置文件

/etc/profile     /etc/bashrc      /etc/profile.d用户登录到系统 会运行这个目录下面的脚本 以.sh结尾

用户环境变量配置文件

~/,bash_profile       ~/.bashrc      

 

特殊变量:

$   数字

$0  脚本名字

$1  命令行脚本的第1个参数 

$2  命令行脚本的第2个参数 

$3  命令行脚本的第3个参数 

$4  命令行脚本的第4个参数 

$#  脚本的参数的数量

$?  上一个命令的执行结果  0正确  非0错误       

 

#!bin/bash

a=$1

b=$2

 

awk -vnum1=$a -vnum2=$b ‘BEGIN{print num1+num2}‘

awk -vnum1=$a -vnum2=$b ‘BEGIN{print num1-num2}‘

awk -vnum1=$a -vnum2=$b ‘BEGIN{print num1*num2}‘

awk -vnum1=$a -vnum2=$b ‘BEGIN{print num1/num2}‘

[root@oldboy files]# sh num.sh 10 20

30

-10

200

0.5

1.1 shell条件表达式

判断 /oldboy 目录是否存在  如果存在  显示   dir exist

[root@oldboy /]# ls -d /oldboy/ && echo dir exist

/oldboy/

dir exist

 

条件表达式:   -d 目录是否存在  -f 文件是否存在

[root@oldboy /]# [ -d /oldboy ]

[root@oldboy /]# echo $?

0

 

[root@oldboy /]# [  -f /etc/hostsa ]|| touch /etc/hostsa

[root@oldboy /]# ll /etc/hostsa

-rw-r--r--. 1 root oldboy 0 Jun  2 17:09 /etc/hostsa

 

[ 1 -eq 1 ]

-eq          equal            ==

-ne          not equal        !=

-gt          great than       >

-ge          great equal      >=

-lt          less  than       <

-le          less  equal      !<

1.2 if语句

#单分支的判断

if [ 如果你是高富帅 ];then

    你可以迎娶白富美 灰姑娘 ... 随便挑选

fi

 

[root@oldboy scripts]# cat cal.sh

#!/bin/bash

a=$1

b=$2

 

if [ $# -ne 2 ];then

   echo "Usage $0 num1 num2"

   exit

fi

 

awk -vnum1=$a -vnum2=$b ‘BEGIN{print num1+num2}‘

awk -vnum1=$a -vnum2=$b ‘BEGIN{print num1-num2}‘

awk -vnum1=$a -vnum2=$b ‘BEGIN{print num1/num2}‘

awk -vnum1=$a -vnum2=$b ‘BEGIN{print num1*num2}‘

 

#双分支的判断

if [ 如果你是高富帅 ];then

    你可以迎娶白富美 灰姑娘 ... 随便挑选

else

    只要是个女的就行

fi

 

#输入两个数字

#比较两个数字的大小

# a >   b  显示 a bigger than b

#a  <=  b  显示 a  less equal b

 

#if [第1个数字 大于 第2个数字 ];then

#显示 $oldboy  > $lidao

#否则

#显示 $oldboy <= $lidao

#fi

 

[root@oldboy scripts]# cat  compare.sh

#!/bin/bash

 

oldboy=$1

lidao=$2

 

if [ $# -ne 2 ];then

   echo "Usage:$0 num1 num2:"

   exit

fi

 

if [ $oldboy -gt $lidao ];then

   echo "$oldboy bigger than $lidao"

else

   echo "$oldboy less equal $lidao"

fi

1.3 read交互模式

[root@oldboy scripts]# read -t 5 -p "input password:" a b    -t停留时间 –p显示input password

input password:10 20                                                     –s不显示内容

[root@oldboy scripts]# echo $a $b

10 20

[root@oldboy files]# cat a.sh

#!/bin/bash

read -p "输入内容: " a b

 

if [ $a -gt $b ];then

    echo "$a > $b"

elif [ $a -eq $b ];then  

    echo "$a = $b"

else

    echo "$a < $b"

fi

[root@oldboy files]# sh a.sh

输入内容: 20 10

20 > 10

[root@oldboy files]# sh a.sh

输入内容: 20 20

20 = 20

[root@oldboy files]# sh a.sh

输入内容: 10 20

10 < 20

1.4  for循环

for    in    do    done

[root@oldboy files]# for  lidao  in  3 2 1 6 5 4   

> do

>      echo $lidao

> done

3

2

1

6

5

4

 

[root@oldboy files]# for n in {01..7}; do echo zhao,${n}week ${n}group take you to 大保健,find ${n}woman.; done

zhao,01week 01group take you to 大保健,find 01woman.

zhao,02week 02group take you to 大保健,find 02woman.

zhao,03week 03group take you to 大保健,find 03woman.

zhao,04week 04group take you to 大保健,find 04woman.

zhao,05week 05group take you to 大保健,find 05woman.

zhao,06week 06group take you to 大保健,find 06woman.

zhao,07week 07group take you to 大保健,find 07woman.

 

优化linux开机启动项目,只保留crond rsyslog sshd network sysstat 其他都关闭

[root@oldboy files]# for n in `chkconfig|awk ‘!/crond|sshd|network|rsyslog|sysstat/{print $1}‘`;do chkconfig $n off ;done

[root@oldboy files]# chkconfig |sed -nr ‘/crond|sshd|network|rsyslog|sysstat/p‘

crond          0:off   1:off   2:on    3:on    4:on    5:on    6:off

network        0:off   1:off   2:on    3:on    4:on    5:on    6:off

rsyslog        0:off   1:off   2:on    3:on    4:on    5:on    6:off

sshd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

sysstat        0:off   1:on    2:on    3:on    4:on    5:on    6:off

shell编程基础

标签:info   exist   基础   表达   下划线   ESS   循环   input   cti   

原文地址:https://www.cnblogs.com/jazzxs/p/9175223.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!