日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

苏嵌第一天,shell中一些基础知识

發(fā)布時間:2023/12/19 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 苏嵌第一天,shell中一些基础知识 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、常用環(huán)境變量
1、HOME變量
Linux系統(tǒng)中的每個用戶都有一個相關(guān)的稱作HOME的目錄。

2、PATH變量
包含一列用冒號定界的目錄的路徑名字,便于可執(zhí)行程序的搜索。

3、PS1變量
PS1變量包含了shell提示符,$符號

4、LOGNAME變量
包含用戶的注冊名字
echo “${LOGNAME}”

5、SHLVL變量
該變量包含你當(dāng)前工作的shell level

6、SHELL變量
環(huán)境變量存儲了用戶的缺省shell,即shell類型

7、env命令
可用來查看所有已移除的環(huán)境變量表和它們各自的值

二、常用內(nèi)部變量
$# ——傳送給shell程序的位置參數(shù)的數(shù)量
$? ——最后命令的完成碼或者在shell程序內(nèi)部執(zhí)行的shell程序(返回值)
$0 ——shell程序的名稱
$* ——調(diào)用shell程序時所傳送的全部參數(shù)的單字符串, “參數(shù)1”“參數(shù)2”…形式保存的參數(shù)
$n ——第n個參數(shù)

三、條件判斷命令
test n1 -參數(shù) n2(或 –參數(shù) 表達式)
真返回0,假返回1。

參數(shù):
-lt 小于
-le小于等于
-gt 大于
-ge 大于等于
-eq 等于
-ne 不等于

·test語句的等價形式[ 1 –lt 4 ]
可用中括號代替test,把表達式括起來實現(xiàn)判斷
注意表達式與中括號間有空格。

test 1 –lt 4 //判斷1<4
echo $? //結(jié)果為0

eg:若輸入的參數(shù)x 是正數(shù),顯示 x number is positive

#!/bin/bash if test $1 -gt 0 then echo "$1 number is positive" fi

四、文件測試的常用代碼
-f 存在且是普通文件
-d 存在且是目錄
-s 存在且字節(jié)數(shù)大于0
-r 存在且可讀
-w 存在且可寫
-x 存在且可執(zhí)行
如:test -d “mydoc”
判斷mydoc是否是目錄
五、課后作業(yè)

  • 編寫一個名為iffile程序,它執(zhí)行時判斷/bin目錄下date文件是否存在?
  • #! /bin/bashfname=/bin/dateif (test –f “$fname”) thenecho “exist”fi

    說明:
    在shell程序中經(jīng)常需要判斷所處理的文件是否存在。本程序采用if語句的簡單格式測試date文件,如果存在,則顯示相關(guān)信息,否則退出if語句。

    2.編寫一個名為greet的問候程序,執(zhí)行時能根據(jù)系統(tǒng)當(dāng)前的時間向用戶輸出問候信息。設(shè)從半夜到中午為早晨,中午到下午六點為下午,下午六點到半夜為晚上。

    #! /bin/sh -hour=`date|cut –c 10-11`if test “$hour” –ge 0 –a “$hour” –lt 12; thenecho “Good morning!”elif test “$hour” –ge 12 –a “$hour” –le 18; thenecho “Good afternoon!”elseecho “Good evening!”fi

    說明:
    第一個有效語句是將命令執(zhí)行的結(jié)果賦給hour變量,所以用反向單引號。
    用cut命令從date命令的輸出中切割出“小時”信息;這里-c 10-11選項表示只切割10到11列。
    這個程序使用了if連用格式,也可以使用if完整格式的嵌套形式。

    3.編寫一個名為ifuser的程序,它執(zhí)行時帶用戶名作為命令行參數(shù),判斷該用戶是否已經(jīng)在系統(tǒng)中登錄,并給出相關(guān)信息。

    #! /bin/sh - if test $# -ne 1 then echo "Incorrect number of arguments"echo "Usage: ifuser username" elseuser=$1if who | grep –q $user ; thenecho $1 "user is logged on."exit 0elseecho $1 "user is not logged on."exit 1fi fi

    說明:
    (1)由于who | grep $user不是表達式而是命令組合,所以不需要test語句測試;如果命令組合執(zhí)行成功,即找到指定的用戶名則返回碼為0;否則為非0。
    (2)在這個程序中使用了grep字符串搜索命令和“|”管道命令
    (3)用grep 命令–q選項來禁止顯示搜索到的信息。
    (4)還使用了exit命令,以終止shell程序的執(zhí)行。exit 0表示程序終止后返回0值,而exit 1表示程序終止后返回非0的值。

    4.編寫一個名為menu的程序,實現(xiàn)簡單的彈出式菜單功能,用戶能根據(jù)顯示的菜單項從鍵盤選擇執(zhí)行對應(yīng)的命令。

    #! /bin/sh - clear echo " -----------------MENU------------------" echo echo " 1.Find files modified in last 24 hours" echo " 2.The free disk space" echo " 3.Space consumed by this user" echo " 4.Exit" echo echo -n " Select:" read choice case $choice in 1)find $HOME -mtime -1 -print;; 2)df;; 3)du -s $HOME;; 4)exit;; *)echo "Invalid option"esac

    說明:
    (1)本程序菜單的第一項是顯示/home目錄下,最近24小時內(nèi)所有修改過的文件。命令中的-1參數(shù)是數(shù)字“1”,表示一天(24小時)。第二項是檢查磁盤空間。第三項是顯示/home目錄下文件的大小,命令中的-s選項是為了僅顯示總計。第四項是退出程序。
    (2)為了使程序美觀,用echo –n實現(xiàn)輸入的選擇數(shù)字不換行。
    (3)輸入的數(shù)字不在1-4范圍內(nèi)時,顯示無效的選項信息。

    5.編寫一個名為chname的程序,將當(dāng)前目錄下所有的.txt文件更名為.doc文件。

    #! /bin/sh - for file in *.txt doleftname=`basename $file .txt`mv $file $leftname.doc done

    說明:
    (1)在Linux系統(tǒng)中不支持mv .txt .doc這樣的更名命令形式,如果需要將文件成批地更名最好編寫一個shell腳本文件。
    (2)在for語句的參數(shù)列表中使用了“*”通配符。
    (3(在程序中用到basename命令,該命令從隨后的文件名剝?nèi)ブ付ǖ暮缶Y。

    6.編寫一個名為chuser的程序,執(zhí)行中每隔5分鐘檢查指定的用戶是否登錄系統(tǒng),用戶名從命令行輸入;如果指定的用戶已經(jīng)登錄,則顯示相關(guān)信息。

    #! /bin/sh –if test $# -ne 1thenecho “Usage: chuser username”elseuser=”$1”until who |grep “$userdosleep 300doneecho$user has logged on!”fi

    說明:
    (1)如果沒有從命令行輸入用戶名,則測試$# -ne 1為“真”,顯示用法提示信息。
    (2)程序中until語句的expression(循環(huán)條件)是who|grep “$user”命令執(zhí)行的返回碼,如果沒有找到指定的用戶名,返回碼為非0(為“假”),則用sleep命令暫停執(zhí)行程序5分鐘;找到后返回碼為0(為“真”),則終止循環(huán)并顯示該用戶已經(jīng)登錄的信息。
    (3)采用重定向到/dev/null空文件的目的是不顯示查找到的用戶其他信息。

    總結(jié)

    以上是生活随笔為你收集整理的苏嵌第一天,shell中一些基础知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。