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