日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

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

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

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

5、SHLVL變量
該變量包含你當前工作的shell level

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

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

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

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

參數:
-lt 小于
-le小于等于
-gt 大于
-ge 大于等于
-eq 等于
-ne 不等于

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

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

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

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

四、文件測試的常用代碼
-f 存在且是普通文件
-d 存在且是目錄
-s 存在且字節(jié)數大于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程序中經常需要判斷所處理的文件是否存在。本程序采用if語句的簡單格式測試date文件,如果存在,則顯示相關信息,否則退出if語句。

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

    #! /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í)行的結果賦給hour變量,所以用反向單引號。
    用cut命令從date命令的輸出中切割出“小時”信息;這里-c 10-11選項表示只切割10到11列。
    這個程序使用了if連用格式,也可以使用if完整格式的嵌套形式。

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

    #! /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的程序,實現簡單的彈出式菜單功能,用戶能根據顯示的菜單項從鍵盤選擇執(zhí)行對應的命令。

    #! /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小時內所有修改過的文件。命令中的-1參數是數字“1”,表示一天(24小時)。第二項是檢查磁盤空間。第三項是顯示/home目錄下文件的大小,命令中的-s選項是為了僅顯示總計。第四項是退出程序。
    (2)為了使程序美觀,用echo –n實現輸入的選擇數字不換行。
    (3)輸入的數字不在1-4范圍內時,顯示無效的選項信息。

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

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

    說明:
    (1)在Linux系統中不支持mv .txt .doc這樣的更名命令形式,如果需要將文件成批地更名最好編寫一個shell腳本文件。
    (2)在for語句的參數列表中使用了“*”通配符。
    (3(在程序中用到basename命令,該命令從隨后的文件名剝去指定的后綴。

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

    #! /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)并顯示該用戶已經登錄的信息。
    (3)采用重定向到/dev/null空文件的目的是不顯示查找到的用戶其他信息。

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。