复习二
bash的配置文件:
按生效范围划分: 全部配置: /etc/profile /etc/profile.d/*.sh /etc/bashrc 个人配置: ~/.bash_profile ~/.bashrc 按功能划分: 环境变量,运行命令和脚本: 全局:/etc/profile /etc/profile.d/*.sh 个人:~/.bashrc_profile 定义本地变量,命令别名: 全局:/etc/bashrc 个人:~/.bashrc shell登录: 交互式登录: 直接通过终端输入帐号密码登录: 使用“su - UserName”或“su -l UserName”切换的用户 /etc/profile-->/etc/profile.d*/.sh-->~/.bash_profile-->~/.bashrc--/etc/bashrc 非交互式登录: su USERName 图形界面下打开的终端 执行脚本 ~/.bashrc-->/etc/bashrc-->/etc/profile.d/*.sh 辑配置文件定义的新配置的生效方法: (1)重新启动shell进程; (2)使用source或.命令进程
bash中的算术运算:
+ - * / %(取余数) 实现算术运算: 1,let var=算数运算表达式 [root@localhost ~]# name1=3 [root@localhost ~]# name2=4 [root@localhost ~]# let name3=$name1+$name2 [root@localhost ~]# echo $name3 7 2,(2)var=$[算术表达式] [root@localhost ~]# name4=$[$name1+$name2] [root@localhost ~]# echo $name4 7 3,(3)var=$(()) [root@localhost ~]# name5=$(($name1+$name2)) [root@localhost ~]# echo $name5 7 4,var=$(expr args1 arg2 arg3...) [root@localhost ~]# name6=$(expr $name1 + $name2) [root@localhost ~]# echo $name6 7 bash有内建的随机数生成器;$RANDOM [root@localhost ~]# echo $[RANDOM%60] 17 [root@localhost ~]# echo $[RANDOM%60+1]取1到60之间 增强型赋值: [root@localhost ~]# name=10 [root@localhost ~]# [root@localhost ~]# let name+=1 [root@localhost ~]# echo $name 11 [root@localhost ~]# echo $name 11 [root@localhost ~]# let name+=1 [root@localhost ~]# echo $name 12 如果后面数字不是1。 [root@localhost ~]# let name+=2 [root@localhost ~]# echo $name 17
练习:
练习1,写一个脚本 计算/etc/passwd文件中的第10个用户和第20用户的ID之和 #!/bin/bash userid1=$(head -n 10 /etc/passwd | tail -n 1 | cut -d: -f3) userid2=$(head -n 20 /etc/passwd | tail -n 1 | cut -d: -f3) useridsum=$[$userid1+$userid2] echo "uid sum: $useridsum" [root@localhost ~]# cat suansu.sh #!/bin/bash # user1=`head -n 10 /etc/passwd | tail -n 1 | cut -d':' -f3` user2=`head -n 20 /etc/passwd | tail -n 1 | cut -d':' -f3` # userzongsu=$[$user1 + $user2] # echo "zong shu :$userzongsu" [root@localhost ~]# chmod +x suansu.sh [root@localhost ~]# ./suansu.sh zong shu :509 练习2:写一个脚本 传递2个文件路径参数给脚本,计算这2个文件中所有空白行之和 #!/bin/bash spaceline1=$(grep "^[[:space:]]*$" $1 | wc -l) spaceline2=$(grep "^[[:space:]]*$" $2 | wc -l) echo "The sum of space line: $[$spaceline1+$spaceline2]" ❤练习3:统计/etc, /var, /usr目录共有多少个一级子目录和文件; 变量取值的时候: var=$()和var=``没有区别
条件测试:
判断某需求是否满足,需要由测试机制来实现; 专用的测试表达式需要由测试命令辅助完成测试过程; 测试命令: test EXPRESSION [ EXPRESSION ] :命令 [[ EXPRESSION ]]:关键字 note:前后必须要有空格 bash的测试类型: 数值测试 -gt:是否大于 -ge:是否大于等于 -eq:是否等于 -ne:是否不等于 -lt:是否小于 -le:是否小于等于 [root@localhost ~]# name1=3 [root@localhost ~]# name2=4 [root@localhost ~]# name3=3 [root@localhost ~]# test $name1 -gt $name2 [root@localhost ~]# echo $? 1 [root@localhost ~]# test $name1 -lt $name2 [root@localhost ~]# echo $? 0 字符串测试 ==/=:字符串等值测试 >:是否大于: <:是否小于: !=:是否不等于: =~:左侧字符串是否能够被右侧的PATTERN所匹配到: Note:次表达式一般用于[[ ]]中 -z “STRING”:测试字符串是否为空,空则为真,不空则为假 -n “STRING”:测试字符串是否为空,空则为假,不空则为真 [root@localhost ~]# [[ "$name1" = "$name2" ]] [root@localhost ~]# echo $? 1 [root@localhost ~]# [[ "$name1" =~ ^o.* ]] [root@localhost ~]# echo $? 1 [root@localhost ~]# [[ "$name1" =~ ^a.* ]] [root@localhost ~]# echo $? 0 [root@localhost ~]# [[ -z "$name1" ]] [root@localhost ~]# echo $? 1 [root@localhost ~]# [[ -n "$name1" ]] [root@localhost ~]# echo $? 0 ❤练习:写一个脚本 接受一个文件路径作为参数; 如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出; 如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数; [ $# -lt 1 ] && echo "At least one argument." && exit 1 bash自定义退出状态码: exit [n]:自定义退出状态码 注意:脚本一旦遇到exit命令。脚本会立即终止,终止退出状态取决于exit命令后面的数字: 注意:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码:
特殊变量:
$# 表示变量的个数,常用于循环 $@ 当前命令行所有参数。置于双引号中,表示个别参数 $* 当前命令行所有参数。置于双引号中,表示将命令行所有参数当初一个单独参数 $-(连字号) 在引用数给予Shell的选项 $? 表示上一个命令退出的状态 $$ 表示当前进程编号 $0 表示当前程序名称 $! 表示最近一个后台命令的进程编号 $HOME 表示当前用户根目录 $IFS 表示内部的字段分隔符 $LANG 当前locale默认名称 $PATH 环境变量 $PPID 父进程编号 $PWD 当前工作目录 测试表达式的类别: 数值比较 字符串测试 文件测试: 存在性测试 -a FILE -e FILE: 文件存在性测试,存在为真,否则为假; 存在性及类别测试 -b FILE:是否存在且为块设备文件; -c FILE:是否存在且为字符设备文件; -d FILE:是否存在且为目录文件; -f FILE:是否存在且为普通文件; -h FILE 或 -L FILE:存在且为符号链接文件; -p FILE:是否存在且为命名管道文件; -S FILE:是否存在且为套接字文件; 文件权限测试: -r FILE:是否存在且可读 -w FILE: 是否存在且可写 -x FILE: 是否存在且可执行 文件特殊权限测试: -g FILE:是否存在且拥有sgid权限; -u FILE:是否存在且拥有suid权限; -k FILE:是否存在且拥有sticky权限; 文件大小测试: -s FILE: 是否存且非空; 文件是否打开: -t fd: fd表示文件描述符是否已经打开且与某终端相关 -N FILE:文件自动上一次被读取之后是否被修改过; -O FILE:当前有效用户是否为文件属主; -G FILE:当前有效用户是否为文件属组; 双目测试: FILE1 -ef FILE2: FILE1与FILE2是否指向同一个设备上的相同inode FILE1 -nt FILE2: FILE1是否新于FILE2; FILE1 -ot FILE2: FILE1是否旧于FILE2; 组合测试条件: 逻辑运算: 第一种方式: COMMAND1 && COMMAND2 COMMAND1 || COMMAND2 ! COMMAND [ -e FILE ] && [ -r FILE ] 第二种方式: EXPRESSION1 -a EXPRESSION2 EXPRESSION1 -o EXPRESSION2 ! EXPRESSION 必须使用测试命令进行; # [ -z "$hostName" -o "$hostName"=="localhost.localdomain" ] && hostname www.magedu.com # [ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab
原创文章,作者:wostop,如若转载,请注明出处:http://www.178linux.com/24208
评论列表(1条)
写的很好,排版也很漂亮,加油