#位置参数变量:
#my_shell.sh ubuntu($1) centos($2) linux($3)#引用方式:$1 $2 $3#useradd $1#useradd $2#useradd $3#---------##echo $1 |##echo $2 |##echo $3 |#然后执行脚本,bash lianxi hello ubuntu gundan#hello#ubuntu#gundan#作用可以真正实现校本化编程#练习:写一个脚本,通过命令传递三个文件路径给脚本,计算其空白行之和。#---------------------------------------##file1=$(grep "^$" $1 |wc -l) |##file2=$(grep "^$" $2 |wc -l) |##file3=$(grep "^$" $3 |wc -l) |##sum_file=$[$file1+$file2+$file3] |##echo "total blank lines is: $sum_file"|#假设这个文件是/etc/passwd 与 /tmp/lals,则写完上面的编写后执行:#bash lianxi /etc/passwd /tmp/lals /dev.dago 既可以得出结果.#===============================================================================#特殊变量#$0 脚本文件路径自身#echo $0#获得:lianxi 文件本身路径# basename命令可以取一个文件的基名#比如 basename /root/lianxi#得:lianxi#$# 表示脚本参数的个数#echo $##=======================================##file1=$(grep "^$" $1 |wc -l) |##echo "total blank lines is: $sum_file"|##echo $# |#的1 ===================================#当输入的参数少于2个是,报错退出;#==============================================# [ $# -lt 2 ] && echo "给我2个文件" && exit 1|#==============================================#练习:判断,/etc/passwd 是否为文件,如果为文件,则输出/etc/passwd is files,该路径通过命令传递的方式传入,当传入命令个数大于1,则报错。#================================================================##[ $# -gt 1 ] && echo "传入的文件个数文件大于1" && exit 1 |##[ -f $1 ] && echo "/etc/passwd is files |#================================================================#在root目录下。写一个脚本,该脚本可以一次性添加3个用户。通过传递参数的方式。进行用户添加,当传递的参数不符合3个的时候,报错。当传递完成后,输出那些用户被添加了,当,三名用户添加完>成后,脚本只能执行一次,之后需要将本脚本进行锁机制不能再执行将脚本权限改成属主可读可写可执行。(脚本只有正确后,才能进行加固]#===============================================##[ $# -eq 3 ] || echo “给我3个用户” && exit 1 |##useradd $1 && a=1 |##useradd $2 && b=1 |##useradd $3 && c=1 |##sum=$[$a+$b+$c] |##[ $suum -eq 3] && echo "$1 $2 $3" || exit2 |##chmod 700 $0 =================================#条件判断 (选择分支)#shell执行是 顺序执行的#选择分支:# 单分支的if 语句:# if 测试条件;# then# 代码分支# fi# 双分支>的if语句:# if 测试条件;then# 条件为真的时候执行的分支# elif测试条件:then# elif测试条件:then# else# 条件为假的时候执行的分支# fi#示例:通>过参数传递一个用户名给脚本,此用户名如果不存在的话,则进行添加。例:通过参数传递一个用户名给脚本,此用户名如果不存在的话,则进行添加。#if ! grep "^$1\>" /etc/passwd &> /dev/null;then# useradd $1# echo $1 |passwd --stdin $1 &> /dev/null# echo "$1 用户存在"#fi#当给的用户不等1个的时候,报错退出#if [ $# -ne 1 ];then#echo "给我一个用户名"#exit 1#fi#echo "保持自己的节奏,不必盲目追赶他人,适合自己就好!"#练习:通过命令参数,给定两个数字。输出其中较大的值#if [ ! $# -eq 2 ];then |#echo "给我2个数" |#exit 2 |#fi |#if [ $1 -eq $2 ];then |#echo "两数相等" |#elif [ $1 -gt $2 ];then|#echo "$1 比较大" |#else |#echo "$2 比较大" |#fi |#-----------------------#练习:通过命令行参数。给定两个文本文件名,如果摸文件不存在,则结束脚本执行,若都存在时,返回每个文件的行数,并echo出去中的行数较多的文件--#[ $# -ne 2 ] && echo "gei wo liang ge wen jain" && exit 1 |#if ! [ -e $1 ];then |------------------------------------#echo "$1 is not find" |#exit 2 ---------------|#elif ! [ -e $2 ];then |#echo "$2 is not find" |#exit 3 ---------------|#fi -------------------|--------#file1=$(wc -l $1|cut -d' ' -f1)|#file2=$(wc -l $2|cut -d' ' -f1)|#echo "$1 的行数是 $file1"------|#echo "$2 的行数是 $file2"------|#if [ $file1 -gt $file2 ];then -|# echo "$file1 is more"-------|#elif [ $file1 -eq $file2 ];then|#echo "then same"---------------|#else---------------------------|# echo "$file2 is more"----=|#fi-----------------------------|#shell脚本之用户交互#read [option]# -p 'prompt'提示符# -t timeout 时间# 练习,用read实现一个脚本 请求给一个用户,添加一个用户然后给定密码:# read -p "给我一个用户和密码:" A B |#useradd $A |echo $A |#echo $B |#echo "$B" |passwd "$A" --stdin &> /dev/null |#--------------------------------------------#read -p "是否保存重启:[Y/n]" A#if [ $A == "Y" ];then#reboot#else#echo "oh no"#fi写一个脚本,完成如下功能,判断给定的两个数值,谁大谁小。给定数值的方法:命令参数。命令交互#read -p "给我两个数值我来判断谁大谁小:" A B#if [ $A -gt $B ];then#echo "$A is big"#elif [ $A -eq $B ];then#echo "相等"#else# echo "$B is big"#o "$2 is not find" |##exit 3 ---------------|##fi -------------------|--------##file1=$(wc -l $1|cut -d' ' -f1)|##file2=$(wc -l $2|cut -d' ' -f1)|##echo "$1 的行数是 $file1"------|##echo "$2 的行数是 $file2"------|##if [ $file1 -gt $file2 ];then -|## echo "$file1 is more"-------|##elif [ $file1 -eq $file2 ];then|##echo "then same"---------------|##else---------------------------|## echo "$file2 is more"----=|##fi-----------------------------|##shell脚本之用户交互##read [option]## -p 'prompt'提示符## -t timeout 时间## 练习,用read实现一个脚本 请求给一个用户,添加一个用户然后给定密码:## read -p "给我一个用户和密码:" A B |##useradd $A |#i###写一个脚本,提示用户输入一个字符串,如果输入时quit,则退出,否则,显示其输入的字符串脚本内容。#read -p "嘿嘿:" A |#if [ $A == "quit" ];then |#exit 1 |#else |#echo "$A" |#fi |#====================================#练习:背景:公司来了个新员工,需要给新员工开通系统账号和统计出新员工的信息。让用户指定一个用户名和密码,若用户名之前存在,先进行删除。之后则为用户添加系统账号。完成后,需要统计员工的:手机号,email。QQ号,年龄信息,收集后储存到该用户的家目录中。完成以上操作,询问该用户是否需要给给用户单独建立一个工作目录为/data/username,默认>是需要,如果不需要则需输入N或者n#read -p "给我一个用户名和密码,我来帮你添加:" A B#id $A &> /dev/null && userdel $A && useradd -r $A && echo "$B" |passwd $A --stdin || #useradd -r $A && echo "$B" |passwd $A --stdin#echo $A#echo $B#touch /home/$A.txt#read -p "请将你的手机号,邮箱,QQ号,年龄,依次输入以空格隔开:" C D E F#echo -e "手机:$C\n邮箱:$D\nQQ:$E\n年龄:$F " >> /home/$A.txt#read -p "需要帮你建立一个工作目录吗?[Y/N]:" G#if [ $G == "n" ];then#exit 1#elif [ $G == "N" ];then#exit 2#else#mkdir -p /data/$A && echo "工作目录创建完成"#fi