苏嵌第一天,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è)
說明:
在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 “$user”dosleep 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中一些基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python init self_转载-
- 下一篇: 机器人 蓝buff 钩_lol:机器人史