Linux之Shell编程学习

来源:互联网 发布:知乎回答被删除 编辑:程序博客网 时间:2024/06/05 17:35

首先看一个简单实例脚本:

首先输入vim hello.sh新建一个hello.sh的脚本文件:

#!/bin/bash   //必须添加的#第一个脚本    //#代表注释echo -e "\e[1m;36 努力 \e[0m  //输出努力

Shell脚本执行的方法:

chmod 755 hello.sh   //赋予权限直接运行./hello.sh     //相对路径和绝对路径均可bash hello.sh     //通过Bash调用执行的脚本

Shell编程之变量的学习

Bash变量的命名规则:

1.变量名必须以字母或下划线字符开头,其余的字符可以是字母,数字(0~9)或下划线字符

2.变量名的长度不得超过255个字符

3.变量名的有效范围必须是唯一的,在Bash中,变量的默认类型都是字符串类型

4.变量的名字是大小写敏感的,给变量赋值时,等号周围不能有任何空白符,为了给变量赋空值,可以在等号后跟一个换行符,若属性值中有空格,需要使用双引号(或单引号)括起来

Shell编程中变量的分类:

1.用户自定义的变量,只在当前的Shell中生效

2.预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的

3.位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的

4.环境变量:这种变量中主要保存的是和系统操作环境相关的数据,变量可以自己定义,但是对系统生效的环境变量名和变量作用是固定的,即只能改变值,不能改变变量名,环境变量在当前的Shell和这个Shell的子Shell中生效

Shell编程中之变量的调用:

echo $变量名x=12  调用:echo "$x"34echo ${x}34  //输出 1234

Shell编程之变量中常用命令:

set  //查看系统中所有正在运行的变量set -u  //如果设定此选项,调用未声明变量时会报错(默认无任何提示)env  //查看环境变量unset 变量名  //删除变量exit  //子Shell退回到父Shell中bash  //进入子Shell

Shell编程之设置环境变量:

export 变量名=变量值  或  变量名=变量值 export 变量名

Shell编程中常用的环境变量:

HOSTNAME:主机名  SHELL:当前的shell  TERM:终端环境  HISTSIZE:历史命令条数  SSH_CLIENT:当前操作环境是用ssh连接的,这里记录客户端ip  SSH_TTY:ssh连接的终端时pts/1  USER:当前登录的用户

PATH环境变量的介绍和使用:

PATH变量:系统查找命令的路径PAHT="$PATH":/root  //增加PATH变量的值,将root目录添加到PATH中去

PS1环境变量的接受和使用:

推荐的参考博客:linux下环境变量PS1设置: https://my.oschina.net/davehe/blog/95441

cd /usr/local/src/PS1='[\u@\A \w]\$ '  //修改命令提示符的内容

Bash语系变量的介绍和学习:

locale  //查询当前系统语系(LANG:定义系统主语系的变量  LC_ALL:定义整体语系的变量),默认语系存于/etc/sysconfig/i18n文件中echo $LANG  //查看系统当前语系locale -a | more  //查看Linux支持的所有语系

Shell编程之位置参数变量的介绍和学习:推荐的参考博客: Linux 位置参数变量: http://blog.csdn.net/yyywyr/article/details/50245073

Shell编程之预定义变量的介绍和学习:

$?:最后一次执行的命令的返回状态,0表示正确,非0表示错误

lsecho $?  //输出0,表示ls命令执行正确ls ssecho $?  /输出2,表示命令执行错误

$$:当前进程的进程号(PID)
$!:后台运行的最后一个进程的进程号(PID)

#!bin/bashecho "$$"  #输出的是当前脚本运行的进程PID号#!bin/bashfind /root -name hello.sh &  #加&符号表示在后台执行echo "$!"

read(接受键盘输入的命令)学习:

#!bin/bashread -p "input your name:" name  #会提示输入name变量的值echo $name#常用的命令选项介绍:-p "提示信息":表示在等待read输入时,输出提示信息-t 秒数:read命令会一直等待用户输入,-t可以指定等待的时间,如read -p "input:" -t 30 name -s:隐藏输入的数据,适用于机密信息的输入,如reap -p "input:" -s passwd-n 字符数:read命令只接受指定的字符数,就会执行,如reap -p "input:" -n 1 name

Shell编程之运算符的学习

declare声明变量类型的介绍:

declare [+/-][选项] 变量名----选项-:给变量设定类型属性  选项-i:将变量声明为整型(integer)----选项+:取消变量的类型属性  选项-x:将变量声明为环境变量----选项-a:将变量声明为数组类型  选项-r:将变量声明为只读变量  -p:显示指定变量的被声明的类型(declare -p:显示系统当中默认所有变量的类型)   

举例之将变量声明为数值型:

a=11  b=22declare -i c=$a+$becho $c  #输出33,不再是11+22

举例之将变量声明为数组类型:

#定义数组:movie[0]=a  movie[1]=bdeclare -a movie[2]=c #查看数组:echo ${movie} #输出第一个数组值echo ${movie[2]}echo ${movie[*]} #输出所有的数组值

举例之使用declare声明环境变量:

declare -x test=123 #和export作用类似,但是实际是declare命令的作用

expr和let数值运算工具的介绍和使用:

aa=11  bb=22dd=$(expr $aa + $bb) //计算aa和bb的和,注意+两侧必须有空格

使用"$((运算符))""$[运算符]"进行数值运算:

aa=11  bb=22ee=$((14%3))  ff=$(($aa+$bb))  gg=$[$aa+$bb]

Linux编程之变量测试推荐参考博客:(Linux学习之变量测试与内容替换)http://blog.csdn.net/zhengxiangwen/article/details/51582995

Shell编程之条件判断和流程控制

推荐的参考和学习博客:Shell编程之条件判断和流程控制: http://blog.csdn.net/renwotao2009/article/details/51809779

aa=11bb=22[ "$aa"=="$bb" ] && echo yes || echo no //注意字符串比较要使用双引号括起来

单分支if语句的注意点:

1.if语句使用fi结尾,和一般语言使用大括号结尾不同
2.[ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格
3.then后面跟符合条件之后执行的程序,可以放在[]之后,用";"分割,也可以换行写入,就不需要";"

Linux之cut命令的学习博客参考:(linux cut 命令):http://www.cnblogs.com/siqi/p/3608893.html

env | grep USER | cut -d "=" -f 2 //从env中查找root

Linux之awk命令的学习博客参考:(linux awk命令详解):http://blog.csdn.net/wuwenxiang91322/article/details/39672991

df -h | grep sda5 | awk '{print $5}' //获得/dev/sd5使用率

Linux之双分支if语句的学习:

#1.一个简单的例子判断输入的文件是否是目录:#!/bin/bashread -t 30 -p "input:" dirif [ -d "$dir" ] --判断是不是目录    then            echo "yes"    else            echo "no"fi
#2.判断Apache是否启动:#!/bin/bashtest=$(ps aux | grep httpd | grep -v grep) #截取httpd进程,并把结果赋给变量testif [-n "$test" ]     then #如果test的值不为空,则执行then命令            echo "$(date) httpd is ok!" >> /tmp/autostart-acc.log    else            echo "$(date) restart httpd !!" >> /tmp/autostart-err.log            /etc/rc.d/init.d/httped start #httpd开启命令(service httpd start是简化命令,在Shell脚本中不能使用!!)fi

Linux之多分支if语句的学习:

Linux之sed命令的学习博客参考:(linux之sed用法):http://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html

sed 's/[0-9]//g' //将数值替换为空

Linux之for循环语句的学习:

for i in 1 2 3     do         echo $i #依次输出1 2 3     done
0 0
原创粉丝点击