12-Shell脚本_练习
2017-02-03 15:04
381 查看
变量 :
使用变量时, 必须在变量名前加$
用户自定义变量 :
没有数据类型和存储类型
直接定义使用, 在定义时必须赋值
在 = 的左右两端不要出现空格符
如果值出现空格, 需要使用” “
echo $var : 不关心不可见字符
echo “$var” : 原样输出
*exit : 退出 , 结束
* 一条命令的输出结果作为值赋给变量时, 需要使用 ` ` (命令置换符)
vi 分屏 :
处于vi界面; 在底行模式 vsp 文件名
注意文件必须在当前路径下, 文件名个数只能为一个.
在命令行, vi -o 文件名….
vi -O 文件名
位置变量 :
$? : 获取上一条命令的执行状态,
0 : 代表执行成功 , 1或者其他非零值:失败或者出错
输入 : read 变量定义
输出 : echo 变量引用
数据运算 :
expr : + - *(乘法运算符) / %
在使用expr命令进行运算时, 在运算符左右两端至少有一个空格符存在
expr num1+num2 ==== ((num1 + num2))
test 语句 :
字符串 整数 文件属性
字符串 : =
test 字符串1 =或者!= 字符串2 === [ 字符串1 =或者!= 字符串2 ]
注意 : 在[ 的右端 和 ] 的左端 至少有一个空格符存在 .
test 数字1 选项 数字2
两条test语句时, 用&& 表示与 ; 用 || 表示 或
一条test语句时, 用-a 表示与 ; 用 -o 表示 或
获取测试结果, $? 0 : 成立 1 : 不成立
条件 :
-eq (等于)
-ne (不等于)
-gt (大于)
-ge (大于等于)
-lt (小于)
-le (小于等于)
文件属性 :
test 选项 文件名
-r
-w
-x
-d
-f
-e
结构性语句:
单词表部分有命令行输入 , 此时for循环执行次数由命令行传入参数个数决定.
break : 支持跳出多层循环.
continue : 支持结束多层循环的当前次循环.
在函数体内部没有 return 语句
函数使用:
fun
或者
info=`fun`
echo $info
局部变量 : local 变量名
在函数体内部有return语句,如果返回的为整数, 其取值范围在 0 ~ 255
函数使用:
2.check_user : 检查获取到的用户(/etc/passwd)是否存在, 存在,返回用户信息所在的行号; 不存在, 返回 0 , show_user : 获取check_user返回的行号, 并显示出对应用户的信息(用户名, UID,GID) , 循环获取输入, 判断用户是否存在 (调用 check_user 函数) ; 如果存在, 显示其信息 (show_user) ; 不存在, 提示, 重新输入 , 直到输入的为 quit ; 程序结束.
3.输入一个成绩(0 ~ 100), 90 ~ 100 A , 80 ~ 90 B , 60 ~ 80 C , 60 以下 NO PASS
4.输入一个字符串, 当作文件名进行处理 判断文件是否存在, 不存在, 报错退出 exit ;如果存在, 判断该文件是否为普通文件, 是 ; 打印提示信息 不是, 继续判断是否为目录文件, 是 , 打印 delete it ? [ y | n] 获取输入, y -> 删除文件夹, n -> 不删除文件夹 , 其他字符 , 报错退出.
5.在家目录下创建文件夹: dir 把/etc/passwd 和 /etc/group 拷贝 到 dir中 ; 备份文件夹dir 为 dir_bak ; 打包压缩文件夹 dir_bak 为 dir_bak.tar.gz ; 把dir_bak.tar.gz 复制到 / , 删除文件夹 dir
使用变量时, 必须在变量名前加$
用户自定义变量 :
没有数据类型和存储类型
直接定义使用, 在定义时必须赋值
在 = 的左右两端不要出现空格符
如果值出现空格, 需要使用” “
echo $var : 不关心不可见字符
echo “$var” : 原样输出
*exit : 退出 , 结束
* 一条命令的输出结果作为值赋给变量时, 需要使用 ` ` (命令置换符)
vi 分屏 :
处于vi界面; 在底行模式 vsp 文件名
注意文件必须在当前路径下, 文件名个数只能为一个.
在命令行, vi -o 文件名….
vi -O 文件名
位置变量 :
$? : 获取上一条命令的执行状态,
0 : 代表执行成功 , 1或者其他非零值:失败或者出错
输入 : read 变量定义
输出 : echo 变量引用
数据运算 :
expr : + - *(乘法运算符) / %
在使用expr命令进行运算时, 在运算符左右两端至少有一个空格符存在
expr num1+num2 ==== ((num1 + num2))
test 语句 :
字符串 整数 文件属性
字符串 : =
test 字符串1 =或者!= 字符串2 === [ 字符串1 =或者!= 字符串2 ]
注意 : 在[ 的右端 和 ] 的左端 至少有一个空格符存在 .
test 数字1 选项 数字2
两条test语句时, 用&& 表示与 ; 用 || 表示 或
一条test语句时, 用-a 表示与 ; 用 -o 表示 或
获取测试结果, $? 0 : 成立 1 : 不成立
条件 :
-eq (等于)
-ne (不等于)
-gt (大于)
-ge (大于等于)
-lt (小于)
-le (小于等于)
文件属性 :
test 选项 文件名
-r
-w
-x
-d
-f
-e
结构性语句:
if 语句 then 命令列表 fi
if 命令 then 命令列表1 else if then 命令列表2 else 命令列表n fi fi
case 变量的引用 in 模式1) # 允许 模式1 | 模式2 | 模式3) 的使用. 命令列表1 ;; # 注意: ;;不能够省略, 作用强制跳出case语句的执行. 模式2) 命令列表2 ;; 模式3) 命令列表3 ;; *) # 注意 \* 出现的位置. 命令列表n ;; # 处于case语句结尾的;; 可以省略 esac
循环 :
执行: 变量从单词表中取出单词, 每取一次,循环执行一次;直到所有单词被依次取一遍结束, 循环结束.while 命令 do 命令列表 done while : do 命令列表 done # 死循环 , : 不能够省略 until for 变量的定义 in 单词表 do 命令列表 done for 变量的定义 do 命令列表 done
单词表部分有命令行输入 , 此时for循环执行次数由命令行传入参数个数决定.
break : 支持跳出多层循环.
continue : 支持结束多层循环的当前次循环.
函数
函数 : 没有返回值类型 以及 参数类型在函数体内部没有 return 语句
function fun() # function 可以省略不要 { 命令列表 }
函数使用:
fun
或者
info=`fun`
echo $info
局部变量 : local 变量名
在函数体内部有return语句,如果返回的为整数, 其取值范围在 0 ~ 255
函数使用:
fun echo $? fun var=$? echo $var
练习 :
1.在家目录下创建文件夹 file_dir 和 dir_dir , 创建前, 判断文件夹file_dir 和 dir_dir 是否存在 ; 存在, 删除重新创建; 不存在, 直接创建 , 输入一个字符串, 当作目录文件进行处理;判断输入是否为目录文件, 不是-> 报错退出; 是->把该目录下的目录文件、普通文件分别拷贝到 dir_dir 、file_dir ; 并且统计目录文件以及普通文件的个数.#!/bin/bash if [ -e $HOME/file_dir ] then rm -rf $HOME/file_dir fi if [ -e $HOME/dir_dir ] then rm -rf $HOME/dir_dir fi mkdir $HOME/file_dir mkdir $HOME/dir_dir echo -n "请输入一个目录名 : " read dirname num1=0 num2=0 if [ -d $dirname ] then # cd $dirname str=`ls $dirname` for var in $str do if [ -f $dirname/$var ] then cp $dirname/$var $HOME/file_dir ((num1++)) else if [ -d $dirname/$var ] then cp -a $dirname/$var $HOME/dir_dir ((num2++)) else echo "该文件为其他类型, 不做处理" fi fi done else echo "该文件不存在或者不是目录文件" fi echo "该目录下普通文件个数为: $num1" echo "该目录下目录文件个数为: $num2"
2.check_user : 检查获取到的用户(/etc/passwd)是否存在, 存在,返回用户信息所在的行号; 不存在, 返回 0 , show_user : 获取check_user返回的行号, 并显示出对应用户的信息(用户名, UID,GID) , 循环获取输入, 判断用户是否存在 (调用 check_user 函数) ; 如果存在, 显示其信息 (show_user) ; 不存在, 提示, 重新输入 , 直到输入的为 quit ; 程序结束.
#!/bin/bash function check_user() { eist=`cat /etc/passwd | cut -d ':' -f 1 | grep "^$1$" -n | cut -d ":" -f 1 | wc -l` if [ $eist -eq 0 ] then return 0 else line=`cat /etc/passwd | cut -d ":" -f 1 | grep "^$1$" -n | cut -d ":" -f 1` return $line fi } function show_user() { info=`cat /etc/passwd | head -$1 | tail -1 | cut -d ":" -f 1,3,4` echo "$info" } while : do echo -n "请输入一个用户名 : " read username if [ $username = "quit" ] then break fi check_user $username ret=$? if [ $ret -eq 0 ] then echo "该用户不存在, 请重新输入" continue fi show_user $ret done
3.输入一个成绩(0 ~ 100), 90 ~ 100 A , 80 ~ 90 B , 60 ~ 80 C , 60 以下 NO PASS
#!/bin/bash echo -n "请输入一个成绩: " read score if [ $score -gt 100 -o $score -lt 0 ] then echo "输入有误" exit fi if [ $score -ge 90 -a $score -le 100 ] then echo A else if [ $score -ge 80 ] then echo B else if [ $score -ge 60 ] then echo C else echo "NO PASS" fi fi fi
4.输入一个字符串, 当作文件名进行处理 判断文件是否存在, 不存在, 报错退出 exit ;如果存在, 判断该文件是否为普通文件, 是 ; 打印提示信息 不是, 继续判断是否为目录文件, 是 , 打印 delete it ? [ y | n] 获取输入, y -> 删除文件夹, n -> 不删除文件夹 , 其他字符 , 报错退出.
#!/bin/bash echo -n "请输入一个文件名 : " read fname if [ ! -e $fname ] then echo "该文件不存在" exit else if [ -f $fname ] then echo "该文件为普通文件" else if [ -d $fname ] then echo -n "delete it ? [y | n]" read ans if [ $ans = "y" ] then rm -rf $fname else if [ $ans = "n" ] then echo "该文件不需要删除" else echo "输入有误" exit fi fi else echo "该文件为其他类型文件" fi fi fi
5.在家目录下创建文件夹: dir 把/etc/passwd 和 /etc/group 拷贝 到 dir中 ; 备份文件夹dir 为 dir_bak ; 打包压缩文件夹 dir_bak 为 dir_bak.tar.gz ; 把dir_bak.tar.gz 复制到 / , 删除文件夹 dir
cd mkdir dir cp /etc/passwd dir cp /etc/group dir cp -a dir dir_bak tar -czvf dir_bak.tar.gz dir_bak sudo cp dir_bak.tar.gz / rm -rf dir
相关文章推荐
- shell脚本练习一(if语句、case语句、for语句、while语句)
- shell脚本练习(12.10)
- 【Linux】Shell - 脚本练习 - 获取变量的变量值
- shell脚本练习(12.11)
- shell脚本练习
- shell脚本练习 :备份文件(2)修订
- shell脚本练习
- shell 练习 (免密钥登陆脚本)
- 12_Shell语言―――脚本的书写规范以及检查和调试脚本
- shell脚本的语法练习
- Shell脚本练习
- shell脚本编程练习
- Java面试12|Linux及Shell脚本
- shell脚本练习二(打印乘法表、等边三角形、菱形)
- shell 脚本练习。笔记
- shell脚本练习【转】
- shell 脚本练习3
- 5个Shell脚本编程入门练习例子
- shell操作练习(编写shell脚本完成统计文件中的每个月份设备的出现次数)
- shell之脚本练习