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"34或echo ${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
- Linux之Shell编程学习
- linux shell 编程之if(收藏学习)
- LINUX学习之路----shell编程
- Linux学习之shell编程一
- Linux学习之shell编程二
- Linux学习之shell编程三
- Linux学习之shell编程应用
- linux shell 编程之if(收藏学习)
- linux shell 编程之语法学习
- Linux学习笔记之SHELL编程
- 《Linux Shell编程学习笔记之三》
- Linux Shell编程学习
- Linux Shell编程学习
- Linux Shell编程学习
- Linux Shell编程学习
- linux shell编程学习
- 【学习】linux shell 编程
- linux SHELL编程学习
- 素数距离问题
- JavaScript、JQuery-数组
- 小伙的java之旅——注解
- SylixOS DNS浅析
- 典型关联分析(CCA)原理总结
- Linux之Shell编程学习
- Android对象实现Parcelable接口产生的异常
- html5注解1
- 顺序查找及简单优化
- [Crawler] Get the real file link of BaiduYun shared by user with Chrome
- Qt调试时“调试器未设置”
- 2017,VR技术将重新定义未来
- iOS中的runtime和runloop
- 第一个 Gradle 脚本及简单命令