• 欢迎访问GanAHE的小创元世纪,技术交流与资源分享,欢迎加入GanAHE的小创元世纪🤪 微信公众号:星辰换日
  • 电影、教程、软件等分享资源请在本站或微信公众号合作平台:【星辰换日】获取。
  • 首页展示个人参与或独立开发的产品,更多功能在建中......🙆🏼天王盖地虎
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏本站吧🥺
  • 注册采用有效的邮箱,有助于及时收到评论回复、最新资源以及活动通知哟~✔🥳
  • 目前在逐渐打通微信小程序与网站之前的间隔~💻🏢

【Linux实践】权限管理 bash Shell 脚本编程实战

Linux GanAHE 6个月前 (11-16) 49次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

(一)创建文件 File1、File2、File3,依次设置 710、741、751 的数字权限;取消File1 的同组账户可执行权限、取消 File2 的同组账户可读权限、取消 File3 的其他账户可执行权限

(1)设置数字权限

查看改变权限前的文件权限情况:

file

赋予如下格式命名:chmod 710 File1,不同文件按照对应要求即可:
file

可以发现,710数字权限增加了File1的属主和同组的可执行权限;741数字权限增加了File2的属主与其他用户的可执行权限;751增加了File3属主、同组以及其他用户的可执行权限。

(2)设置账户组相关权限

采用命令chmod g-x File1取消File1 的同组账户可执行权限:

file

采用命令chmod g-r File2取消 File2 的同组账户可读权限:

file

采用命令chmod o-x File3取消 File3 的其他账户可执行权限:

file

效果与(1)的整体操作相反。

(二) 分别手工启动前台、后台进程;利用 at 命令调度启动一个作业

(1)前后台执行

ls为例说明,前台执行ls命令,即直接在终端输入并回车,此时在该进程进行时无法进行其他操作;执行后台进程,则在命令后添加&标识符,此时ls在执行的同时,还能同时执行其他命令如w

5faec03c93ba3.png

(2)at定时指令

创建可执行脚本如下:

#!/bin/bash
curl https://dgzc.ganahe.top >> ~/linuxLearn/chowd/atDemand.txt

采用curl指令获取网页内容并重定向输入到文件中。
通过指令at 01:32 today -f atAutobash.sh实现定时执行上述脚本

5faec50ece875.png

通过指令atq或是at -l查看作业列表:

5faec5af97176.png

在指定时间后,输出的文件列表对比如下:

执行前 执行后
5faec2b8a29fd.png 5faec6a3037e6.png

指向的文件atDemand.txt已生成且内容如下:

5faec5de365ee.png

(三)编程提示输入两个单词,然后比较这两个单词。如果两个单词相同则显示“Match”,否则显示“Not match”,最后显示“End!”(if 控制结构)

主要思路:执行脚本后,由用户于输入两个单词,随后采用字符串的比较运算符实现比较。

为了输出信息更为全面与清晰,更能把握到条件判断与选择的细节,故在原题指定要求的输出上,做了一定的调整,编辑脚本如下:

#!/bin/bash

echo " welcome to use my shell's Script @by GanAHE"

echo "--------- the procedure running ------\n "

read -t 20 -p "please input two strings which splited by black:"  str1 str2
echo  - Do Words: ${str1} = ${str2} ?
if [ $str1 = $str2 ];then
        echo '- Match '
elif [ $str1 \> $str2 ];then
        echo "- Not match, the bigger one is:${str1}"

else echo "- Not match, the bigger one is:${str2}"
fi
echo ------ end! ------

采用read-t参数,设置输入时限,避免进程拥塞,同时-p参数可以在输入前给出提示,提升交互效果。
采用if进行条件选择判断,结果如下:

5fb28f4d909d1.png

file

(四)编程创建一个简单的菜单,屏幕显示如下:

a. Date:
b. User:
c. The working directory
Enter a,b or c:

根据用户输入选项做相应操作(case 控制结构)

(1)分析与设计

根据菜单设计的要求,当用户键入a时,输出系统数据情况如内存使用、进程占用等数据;键入b时,输出当前用户以及所有用户;键入c时,给出当前的工作路径。

分析如上需求,只需判断用户输入的内容去选择处理即可,同时增设不同的参数输入时的提示与说明等功能:

#!/bin/bash

echo "\n welcome to use this Script @copyright by GanAHE"
ind="no"
while [ $ind != "quit" ]
do
  echo "\n---------- the system of monitor under Linux -----\n make a choise to get somthing:\na.Date:\nb.User:\nc.The working directory\nEnter a , b or c: "
  read op
  ind=$op
  case "${op}" in a)
        free -m
        echo "-------------------------------"
        df -h
  ;;  

  b)  
        echo -n " - You are: "
        whoami
        echo  " - All user:"
        w | head
 ;;

 c)
       echo -n " - now directory is: "
       pwd
 ;;

 *)
      echo " * Input Error! Please input correct option! \n * You can input 'quit' to exit process"
 esac
done
echo "\n----------- End! -----------"

(2)效果

首先是执行普通选项(a、b、c):

file

file

file

当输入错误选择字符或是退出程序选项时:

file

动态展示效果如下:

(五) 输入分数 score,如果大于等于 60 分并且小于 80 分,输出“成绩良好”;如果大于等于 80 分,输出“成绩优秀”;如果小于 60 分,输出“成绩不及格”

主要涉及整数的条件判断与选择问题,设计的程序如下:

#!/bin/bash

echo "Welcome to use my Script @copyright @GanAHE"
echo
read -p  " - Please input your score:" sc
if [ ${sc} -ge 80 ];then
  echo " 成绩优秀"
elif [ ${sc}  -lt 80 ]&&[ ${sc} -ge 60 ];then
  echo " 成绩良好"
else echo " 成绩不及格"
fi
echo
echo "----------- end! -----------"

输出结果:

file

(六) 编程实现加法、乘法运算、奇偶数判断

(1)设计

题目要求实现基本的数据运算,需要用到exrp、let脚本内部数据运算命令,随后还有数据类型判断等,将全部要求集成:

#!/bin/bash
echo "Thanks to use my Script @copyright by GanAHE"
echo
echo "choice the function:  a.calculator(or any char);  b. Judge parity"
read -p " - Please input your choice: "  cs  

#Judge parity
if [ $cs = b ];then
  read -p " - Plese input an integer: " integer
  let op=integer%2
  if [ $op -eq 0 ];then
      echo "the value: $integer is even number!"
  else echo "the value: $integer is odd number!"
  fi  

# calculator
else
  read -p " - Please input the first number: " num1
  read -p " - Please input the second number: " num2

  read -p " - Please input the second operator(\"+\", \"-\", \"*\", \"/\"): " op
  #if的另一种格式,不仅仅局限于if [a ^ b ];then
  if [ -n "$num1" -a -n "$num2" -a -n "$op" ]
  then
    # 1.check the value
    test1=$(echo $num1 | sed 's/[0-9]//g')
    test2=$(echo $num2 | sed 's/[0-9]//g')
    if [ -n "$test1" -o -n "$test2" ]
    then
        echo "Please input number."
        exit 1
    fi  

    # 2.check the sign of calculation
    case $op in
        "+")
            result=$(($num1 + $num2))
            ;;
        "-")
            result=$(($num1 - $num2))
            ;;
        "*")
            result=$(($num1 * $num2))
            ;;
        "/")
            result=$(($num1 / $num2))
            ;;
        *)

            echo "Please input correct operator, like \"+\", \"-\", \"*\", \"/\"."
            exit 2
            ;;
    esac

    # 3. print the result
    echo "$num1 $op $num2 = $result"
    exit 0
  else
    echo "Number and oprator must not be empty"
    exit 3
  fi
fi

(2)效果

基本数据运算如下:

file

奇偶性判断效果:

file

(七)编程实现 n 的阶乘,n=10

(1) 设计

计算阶乘是一类比较的实用功能,可以设计为:把整个文件当作一个函数来用,直接在命令行输入,就像内置的各种命令一样:

#!/bin/bash

echo " -------- Thanks to use my Script @copyright by GanAHE ----------  "

num=$1
#echo sfddg $1 $2

expr $num + 1 &>/dev/null
[ $? -ne 0 ] && echo "please input a number." && exit 2
[ $# -ne 1 ] && echo 'Usage:$0 number' && exit 1
[ $num -le 0 ] && echo "please input a number bigger than 0" && exit 3
s=1
for i in `seq 1 $num`
do 
   s=$(($s*$i))
done
echo "- result: $s"

(2)效果

经过多次测试与调整,最终结果如下:

file

(八) 编写 shell 脚本,实现分段函数求值。分段函数如下:

file

要求利用多分支 if 条件语句和 for 循环语句实现,并分别输出 x=-5,-3,-1,1,2,3,5 时的值。

(1)主要设计

将分段函数设计成脚本函数形式,通过外部数据传入与调用可以实现函数多次使用,设计如下:

#!/bin/bash
echo "-------- Start ----------"
echo

# Function

func() {
  local t=$1
  local y=0
  if [ $t -ne -3 ]&&[ $t -lt 0 ];then
    let y=$t*$t+$t-6

  elif [ $t -ne 2 ]&&[ $t -ne 3 ]&&[ $t -lt 5 ]&&[ $t -ge 0 ];then
    let y=$t*$t-$t*5+6

  else let y=$t*$t-$t+1
  fi  

  echo " ---------the result: $y"
  echo
}

# Entrance

x=(5 -3 -1 1 2 3 5)
for i in ${x[@]}
do
  echo " - when the value is: x=${i}"
  func $i
done
echo "--------- end! ---------"

(2)效果

输出结果如下:
file

总结

本次实践主要为Linux系统下权限与监视管理、Shell脚本编程的综合应用,一方面可以熟悉相关的原理与知识,另一方面可以用来初步探索脚本的现实应用。

脚本的可执行可以直接通过sh 文件名、bash 文件名、./文件名(需要提前赋予可执行权限)的方式执行,此实践联系了终端单行命令与脚本集成命令、权限与程序设计等,体验到了三种方式的区别与相同点,比如大多数命令均可执行但sh可能不支持echo的换行符等。

条件选择与循环是程序的基础构成之一,以上实践也比较好地运用到了这些语句,提高了程序的灵活性与可执行性。

当然,shell脚本的变量引用与传递、数据的处理与计算等远没有现今流行的Java、C/C++、Python等好用,引用指令不够自然,参数多样化且含有许多字符等,这也是一个不太方便和难以快速学习掌握的一点,也要求我们多加以思考、练习去真正掌握shell的相关知识与应用。


GanAHE 的小创元世纪, 版权所有丨如未注明 , 均为原创丨本网站采用@BY-NC-SA协议进行授权
转载请注明原文链接:【Linux实践】权限管理 bash Shell 脚本编程实战
喜欢 (0)
[WeChat]
分享 (0)
关于作者:
网站的建设与维护者、DGZC的守护者
4 1 评分
都看完了,打个分儿叭~
通知
提醒
0 评论
内部反馈
显示所有评论
0
有什么想法吗,快来留下你的评论吧!x
()
x