Linux学习笔记之SHELL编程
来源:互联网 发布:网络电视需要什么设备 编辑:程序博客网 时间:2024/06/05 16:09
Linux学习笔记之SHELL编程
一、SHELL编程之变量
1. 不管是PHP ,还是JAVA ,它是用来编写应用程序的,或是网站; JAVA主要是实现服务端程序。而shel编程,它是一个脚本语言。它不需要执行编译过程之后再执行;它是编译过程放在执行过程中,所以,执行时间要慢,2. SHELL,主要是帮助管理员,简化管理操作。比如,批量增加用户,批量记录什么LOGBash变量 变量命名规则 - 变量名必须以字母或下划线打头,名字中间只能由字母、数字和下划线组成 - 变量名的长度不得超过255个字符 - 变量名在有效的范围内必须是唯一的 - 在Bash中,变量的默认类型都是字符串型 shell变量存储类型: - 字符串型 - 整数型 - 浮点型 - 日期型 变量的分类 - 用户自定义变量,只能在当前shell中使用 - 环境变量:这种变量中主要保存的是和系统操作环境相关的数据变量可以自定义,但是对系统生效的环境变量名和变量作用是固定 - 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的 - 预定义变量:在Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的 定义变量 变量名=变量值 [root@localhost]# x=5 //等号左右两侧不能有空格 [root@localhost]# name="xsx" 变量调用 echo $x [root@localhost]# y=6 [root@localhost]# echo $x+$y //输出的结果为5+6,而不是11,因为变量默认是字符串 变量叠加 [root@localhost]# x="$x"456//或${x}456 [root@localhost]# echo $x //5456 set //查看当前所有环境变量 unset 变量名 //可以删除变量 export 变量名=变量值 //设置环境变量 env //查看环境变量 Path环境变量 - PATH变量:系统查找命令的路径 - echo ¥PATH //查看PATH环境变量 - PATH="$PATH":/root/sh //增加PATH变量的值 常用环境变量: HOSTNAME:主机名 SHELL:当前的shell TERM:终端环境 USER:当前的用户 HISTSIZE:历史命令条数 PATH:查找命令的路径 PS1环境变量 PSI变量:命令提示符设置 - \d:显示日期,格式为"星期 月 日" - \H:显示完整的主机名。如默认主机名 "localhost.localdomain" - \t:显示24小时制时间,格式为"HH:MM:SS" - \A:显示24小时制时间,格式为"HH:MM" - \u:显示当前用户名 - \w:显示当前所在目录的完整名称 - \W:显示当前所在目录的最后一个目录 - \$:提示符。如果root用户会显示提示符为"#",如果是普通用户会显示提示符为"$" 要想直接通过脚本名执行自己的脚本: (1)将脚本拷贝至 PATH 中的任意目录下(不建议这样做),例如: $ cp hello.sh /bin/ (2)将脚本所在目录添加到 PATH 变量中,例如: $ PATH="$PATH":/root/sh 但系统重启后失效 当前语系查询 locale //查询当前系统语系 - LANG:定义系统主语系的变量 - LC_ALL:定义整体语系的变量 查看系统默认语系 cat /etc/sysconfig/i18n 语系变量LANG - echo $LANG //查看系统当前语系 - locale -a | more //查看Linux支持的所有语系 位置参数变量 - $n//n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10} - $*//这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体 - $@//这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待 - $# //这个变量代表命令行中所有参数的个数 $*与$@的区别 #!/bin/bash for i in "$*"//$*中所有参数看成是一个整体,所以这个for循环只会循环一次 do echo "the parameters is :$i" done for y in "$@"//$@中的每个参数都看成是独立的,所以"$@"中有几个参数,就会循环几次 do echo "the parameter :$y" done 预定义变量 - $? //最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0,则证明上一个命令执行不正确 - $$ //当前进程的进程号(PID) - $! //后台运行的最后一个进程的进程号(PID) 接受键盘输入 read [选项] [变量名] 选项: -p //提示信息,在等待read输入时,输出提示信息 -t //秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间 -n //字符数:read命令只接受指定的字符数,就会执行 -s //隐藏输入的数据,适用于机密信息的输入 read.sh: #!/bin/bash read -p "please input your name:" -t 30 name echo $name read -p "please input your passwd:" -s passwd echo -e "\n" echo $passwd read -p "please input your sex [M/F]:" sex echo -e "\n" echo $sex
二 、SHELL编程之运算符
1.declare声明变量类型 declare [+/-][选项] 变量名 选项: - //给变量设定类型属性 + //取消变量的类型属性 -a //将变量声明为数组型 -i //将变量声明为整数型 -x //将变量声明为环境变量 -r //将变量声明为只读变量,慎重,一旦声明不能取消 -p //显示指定变量的被声明的类型 声明数组变量: 定义数组: movie[0]=zp movie[1]=tp declare -a movie[2]=live 查看数组: echo ${movie} //输出数组第一个元素 echo ${movie[n]} //输出数组第n+1个元素 echo ${movie[*]} //输出数组的所有元素 数值运算方法: 方法1: aa=11 bb=22 cc=declare -i $aa+$bb 方法2: expr或let数值运算工具 aa=11 bb=22 dd=$(expr $aa + $bb) //注意+号左右两侧必须有空格 方法3: aa=11 bb=22 cc=$(($aa+$bb)) //双小括号 dd=$[$a+$b] //中括号
shell编程之环境变量配置文件
常见的配置文件: /etc/profile /etc/profile.d/*.sh ~/.bash_profile ~/.bashrc /etc/bashrc ~/在家目录下,则只对当前的登陆用户起作用,每个用户都会有这两个环境变量文件 /etc/放在etc下的,无论哪个用户登录,都会读取这三个文件,对所有登陆用户起作用 字符截取命令 cut命令 最好用于比较规律,或者分割比较规律的文件,否则无法分割 cut [选项] 文件名 选项: -f 列号:提取第几列 -d 分隔符:按照指定分隔符分割列 printf命令 printf '输出类型输出格式' 输出内容 输出类型: %ns :输出字符串。n是数字指代输出几个字符 %ni:输出整数。n是数字指代输出几个数字 %m.nf:输出浮点数。m和n是数字,指代输出的整数位数和小数位数,%8.2f代表共输出8位数,其中2位是小数,6位是整数。 输出格式: \a //输出警告声音 \b //输出退格键 \f //清除屏幕 \n //换行 \r //回车 \t //水平输出退格键 \v //垂直输出退格键 awk '条件1{动作1}条件2{动作2}...' 文件名 条件(Pattern) 一般使用关系表达式作为条件 x>10判断变量x是否大于10 动作(Action) 格式化输出 流程控制语句
shell编程之条件判断与流程控制
1.按照文件类型进行判断 -b 文件 //判断文件是否存在,并且是否为块设备文件 -c 文件 //判断该文件是否存在,并且是否是字符设备文件 -d 文件 //判断文件是否存在且为目录文件 -e 文件 //判断文件是否存在 -f 文件 //判断该文件是否存在,且是否为普通文件 -L 文件 //判断该文件是否存在,且是否为符号链接文件 -p 文件 //判断该文件是否存在,且是否为管道文件 -s 文件 //判断该文件是否存在,且是否为非空 -S 文件 //判断该文件是否存在,且是否为套接字文件2.按照文件权限进行判断 -r 文件 //判断该文件是否存在,且是否该文件拥有读权限 -w 文件 //判断该文件是否存在,且是否拥有写权限 -x 文件 //判断该文件是否存在,且是否拥有执行权限 -u 文件 //判断该文件是否存在,且是否拥有SUID权限 -g 文件 //判断该文件是否存在,且是否拥有SGID权限 -k 文件 //判断该文件是否存在,且是否拥有SBit权限3.两个文件之间进行比较 文件1 -nt 文件2 //判断文件1的修改时间是否比文件2新 文件1 -ot 文件2 //判断文件1的修改时间是否比文件2旧 文件1 -ef 文件2 //判断文件1是否和文件2的inode号一致,可以理解为两个文件是否为同一个文件。这个判断用于判断硬链接是很好的方法4.两个整数之间的比较 整数1 -eq 整数2 //判断整数1和整数2是否相等 整数1 -ne 整数2 //判断整数1和整数2是否不相等 整数1 -gt 整数2 //判断整数1是否大于整数2 整数1 -lt 整数2 //判断整数1是否小于整数2 整数1 -ge 整数2 //判断整数1是否大于等于整数2 整数1 -le 整数2 //判断整数1是否小于等于整数25.字符串的判断 -z 字符串 //判断字符串是否为空 -n 字符串 //判断字符串是否为非常 字串1==字串2 //判断字符串1是否和字符串2相等 字符串 != 字符串2 //判断字符串1是否字符串2不相等6.多重条件判断 判断1 -a 判断2 //逻辑与 判断1 -o 判断2 //逻辑或 !判断 //逻辑非7.单分支if条件语句 if [条件判断式];then 程序 fi 或者 if [条件判断式] then 程序 fi8.双分支if条件语句 if [条件判断式] then 条件成立时执行的程序 else 条件不成立时执行的程序 fi9.多分支if条件语句 if [条件判断式1] then 当条件判断式1成立时,执行程序1 elif [条件判断式2] then 当条件判断式2成立时,执行程序2 ... else 当所有条件不成立时,执行此程序 fi shell中的多分支条件语句会每个分支都判断一次.....相当于于多个单分支条件语句合在一起; C语言中的多重条件语句是只可能有一个if条件判断式成立,当一个if条件判断式成立的时候, 其它if条件判断式就不会再有被判断的机会,会直接被略过。10.case条件判断 case $变量名 in "值1") 如果变量的值等于值1,则执行程序1 ;; "值2") 如果变量的值等于值2,则执行程序2 ;; ...其他分支 *) 当所有条件不成立时,执行此程序 ;; esac11.while循环 while[条件判断式] do 程序 done 例子: #!/bin/bash #从1加到100 i=1 s=0 while[$i -le 100] do s=$(($s+$i)) i=$(($i+1)) done echo "the sum is : $sum"12.until循环 until[条件判断式] do 程序 done 例子: #!/bin/bash #从1加到100 i=1 s=0 until[$i -gt 100] do s=$(($s+$i)) i=$(($i+1)) done echo "the sum is : $sum"
0 0
- Linux学习笔记之SHELL编程
- 《Linux Shell编程学习笔记之三》
- Linux Shell编程学习笔记
- linux Shell编程学习笔记
- linux shell编程学习笔记
- Linux Shell编程 学习笔记
- linux之shell编程笔记
- Linux学习笔记之<Shell编程初入门>
- Linux之Shell编程学习
- linux命令行与shell脚本编程大全学习笔记之—shell脚本for命令学习
- Linux Shell 编程学习笔记(1)
- Linux Shell编程学习笔记(2)
- Linux Shell编程学习笔记(3)
- Linux Shell编程学习笔记(4)
- Linux Shell编程学习笔记(5)
- linux基础学习笔记-4-shell编程
- Linux shell 脚本编程学习笔记(echo)
- 《Linux Shell编程学习笔记之一》
- Libgdx仿安卓R文件通过Id访问资源
- 技术宅男逆袭 牛人自制激光虚拟投影键盘
- Android的bitmap和优化
- CentOS安装JDK1.7+Tomcat7
- HDU-1711 Number Sequence (kmp)
- Linux学习笔记之SHELL编程
- Building for Bebop on Linux
- MQTT libmosquitto源码分析
- linux grep命令详解
- 基于分布式hadoop的机器学习算法工具包
- socket编程原理
- C++ typedef
- 批量自动替换源码文件中的自动添加内容或者注释 或者其他特殊内容
- Linux学习笔记之网络管理