linux基础知识5-Shell编程基础
来源:互联网 发布:男士刷酸 知乎 编辑:程序博客网 时间:2024/06/05 05:45
视频链接
http://www.imooc.com/learn/336
1. Bash变量1.1 变量分类 # 用户自定义变量 只在当前Shell中生效(局部变量) # 环境变量 在当前Shell和这个Shell的所有子Shell中生效(全局变量, 可用pstree | grep bash 命令查看进程树中的子Shell关系) 这种变量中主要保存的是和系统操作环境相关的数据。 变量可以自定义,但是对系统生效的环境变量名和变量作用是固定的。 # 位置参数变量 这种变量主要是用来向脚本中传递参数或数据的,变量名不能自定义,变量作用也是固定的。 # 预定义变量 是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。1.2 用户自定义变量 # 定义变量('='左右两边没有空格, 变量值中如果有空格, 需要用双引号将变量值引起来) 变量名=变量值 示例: name=123 name="123 abc" # 调用变量 echo $变量名 示例: echo $name # 叠加变量 x="$x"456 x=${x}456 # 查看变量(查看系统中已生效的所有变量) set set -u # -u 参数表示后续调用未声明的变量时会报错(bash: a: unbound variable), 默认无任何提示 # 删除变量 unset 变量名 示例: unset name1.3 环境变量 # 设置环境变量 export 变量名=变量值 示例: x=123 # 设置一个用户自定义变量(局部变量) export y=abc # 设置一个环境变量(全局变量) bash # 进入子Shell中 echo $x # 这里看不到父Shell中的变量x echo $y # 这里可以看到父Shell中的变量y # 调用环境变量 echo $x # 叠加环境变量 x="$x"abc # 查看环境变量 set # 查看所有变量 env # 查看环境变量 # 常用环境变量 echo $HOSTNAME # 主机名 echo $SHELL # 当前Shell echo $HISTSIZE # 历史命令条数 echo $USER # 当前用户 echo $HOME # 当前用户的家目录 echo $LANG # 当前语系信息 echo $PATH # 系统查找命令的路径 echo $PS1 # 命令提示符设置 # PS1环境变量 \d 显示日期, 格式为"星期 月 日" \t 显示24小时制时间, 格式为"HH:MM:SS" \A 显示24小时制时间, 格式为"HH:MM" \u 显示当前用户名 \w 显示当前所在目录的完整名称 \W 显示当前所在目录的最后一个目录 \$ 提示符, 如果是root用户, 会显示为'#', 如果是普通用户, 会显示为'$'(不同系统会有所不同) \H 显示完整的主机名 示例: PS1="[\u@\H \t \w]\$ " # 显示为[root@my-suse 23:25:38 /home]$ PS1="[\e[1;32m\u\e[0m@\H \t \w]\$ " # \e[1; 是设置颜色的起始标识, 32m 表示绿色, \e[0m 是设置颜色的结束标志 # 查询当前系统语系 locale LANG # 定义系统主语系的变量 LC_ALL # 定义整体语系的变量 locale -a | more # 查看系统支持的所有语系 /etc/sysconfig/i18n # 系统默认语系的配置文件1.4 位置参数变量 $n # $0 代表命令本身, $1~$9代表第一到第九个参数, 十以上的参数需要用大括号包含, 如${10} $* # 这个变量代表命令行中所有参数, $*把所有参数看成一个整体 $@ # 这个变量也代表命令行中所有参数, 不过$@把每个参数区分对待 $# # 这个变量代表命令行中所有参数的个数 示例1: my_suse:~ # vi hello.sh ---------- 文件内容如下 ------------ #!/bin/bash num1=$1 num2=$2 sum=$(($num1 + $num2)) echo "$1 + $2 = $sum" ------------------------------------ my_suse:~ # ./hello.sh 12 13 # 这里$((...))表示数值运算, 默认$a+$b是表示字符串拼接操作 示例2: my_suse:~ # vi for.sh ---------- 文件内容如下 ------------ #!/bin/bash for i in "$*" do echo "The params is $i" done for y in "$@" do echo "The param is $y" done ------------------------------------ my_suse:~ # ./for.sh 1 2 3 4 51.5 预定义变量 $? 最后一次所执行命令的返回状态, 0表示上一个命令执行成功, 非0表示上一个命令执行失败 $$ 当前进程的的进程号(PID) $! 后台运行的最后一个进程的进程号(PID) # 接收键盘输入 read [选项] [变量名] -p "提示信息" # 在等待read输入时, 显示的提示信息 -t 秒数 # read命令默认会一直等待用户输入, 使用此选项可以指定等待时间 -n 字符数 # read命令只接受指定的字符数, 就会执行 -s # 隐藏输入的数据, 适用于机密信息的输入 示例: my_suse:~ # vi read.sh ---------- 文件内容如下 ------------ #!/bin/bash read -p "Please input your name: " name echo "name = $name" read -p "Please input your age: " -t 30 age echo "age = $age" read -p "Please input your passwd: " -s passwd echo -e "\npasswd = **$passwd**" read -p "Please input your sex [M/F]: " -n 1 sex echo -e "\nsex = **$sex**" ------------------------------------ my_suse:~ # ./read.sh 2. 条件判断2.1 文件判断 -b 文件 # 该文件是否存在, 并且是否为块设备文件 -c 文件 # 该文件是否存在, 并且是否为字符设备文件 -d 文件 # 该文件是否存在, 并且是否为目录 -e 文件 # 该文件是否存在 -f 文件 # 该文件是否存在, 并且是否为普通文件 -L 文件 # 该文件是否存在, 并且是否为符号链接文件 -p 文件 # 该文件是否存在, 并且是否为管道文件 -s 文件 # 该文件是否存在, 并且是否为非空 -S 文件 # 该文件是否存在, 并且是否为套接字文件2.2 文件权限判断 -r 文件 # 该文件是否存在, 并且是否有读权限 -w 文件 # 该文件是否存在, 并且是否有写权限 -x 文件 # 该文件是否存在, 并且是否有执行权限 -u 文件 # 该文件是否存在, 并且是否有SUID权限 -g 文件 # 该文件是否存在, 并且是否有SGID权限 -k 文件 # 该文件是否存在, 并且是否有SBit权限2.3 两个文件比较 文件1 -nt 文件2 # 文件1的修改时间 是否比 文件2的修改时间 新 文件1 -ot 文件2 # 文件1的修改时间 是否比 文件2的修改时间 旧 文件1 -ef 文件2 # 文件1的索引号 是否和 文件2的索引号 一致, 用于判断硬链接2.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 是否小于等于 整数22.5 字符串比较 -z 字符串 # 字符串 是否为 空 -n 字符串 # 字符串 是否为 非空 字符串1 == 字符串2 # 字符串1 是否等于 字符串2 字符串1 != 字符串2 # 字符串1 是否不等于 字符串22.6 逻辑判断 判断1 -a 判断2 # 逻辑与, 两个都为true, 结果才为true 判断1 -o 判断2 # 逻辑或, 有一个为true, 结果就为true !判断 # 逻辑非 ######################################################### 通过 while 循环读取文件内容#!/bin/bash# while read line do userName=$(echo $line | cut -d':' -s -f1) userId=$(echo $line | cut -d':' -s -f3) if [ $userId -gt 500 ]; then echo "userName=$userName, userId=$userId" fidone < /etc/passwd# end
# 相关链接
https://code.csdn.net/snippets/623740/master/linux-常用命令/raw
-- END
0 0
- Linux Shell基础知识5 脚本编程基础
- linux基础知识5-Shell编程基础
- linux基础知识--shell编程
- linux SHELL 编程基础知识(2)
- linux基础知识之shell编程
- linux基础知识之:Shell编程
- Linux Shell 编程基础
- Linux Shell编程基础
- Linux Shell编程基础
- Linux Shell编程基础
- Linux Shell编程基础
- Linux Shell编程基础
- Linux Shell编程基础
- Linux Shell编程基础
- Linux / Shell编程基础
- Linux Shell编程基础
- Linux Shell编程基础
- Linux Shell编程基础
- P51 第3题 编写一个程序从键盘输入10个数,要求出其中最小的
- Java类文件结构笔记
- 自我的恐惧
- 黑马程序员——JAVA学习笔记——Jdk5.0新特性
- Ubuntu标签式窗口两个有用的快捷键
- linux基础知识5-Shell编程基础
- HAProxy内存池简介
- (8.1.2)网站性能测试:loadrunner的安装
- Android开发架构设计之健壮且可读的安卓架构(上篇)
- 单向链表实现以及通过栈来实现数据的打印
- ServletContext解析
- 阿里内推实习面试体会(客户端开发)
- Axis2: 使用services.xml文件发布WebService(2)
- Java设计模式——代理模式(Proxy)