蘇嵌第一天,shell中一些基礎知識

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

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

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

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

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

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

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

二、常用內部變量
$# ——傳送給shell程序的位置參數的數量
$? ——最后命令的完成碼或者在shell程序內部執行的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 存在且字節數大于0
-r 存在且可讀
-w 存在且可寫
-x 存在且可執行
如:test -d “mydoc”
判斷mydoc是否是目錄
五、課后作業

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

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

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

#! /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

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

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

#! /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語句測試;如果命令組合執行成功,即找到指定的用戶名則返回碼為0;否則為非0。
(2)在這個程序中使用了grep字符串搜索命令和“|”管道命令
(3)用grep 命令–q選項來禁止顯示搜索到的信息。
(4)還使用了exit命令,以終止shell程序的執行。exit 0表示程序終止后返回0值,而exit 1表示程序終止后返回非0的值。

4.編寫一個名為menu的程序,實現簡單的彈出式菜單功能,用戶能根據顯示的菜單項從鍵盤選擇執行對應的命令。

#! /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的程序,執行中每隔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(循環條件)是who|grep “$user”命令執行的返回碼,如果沒有找到指定的用戶名,返回碼為非0(為“假”),則用sleep命令暫停執行程序5分鐘;找到后返回碼為0(為“真”),則終止循環并顯示該用戶已經登錄的信息。
(3)采用重定向到/dev/null空文件的目的是不顯示查找到的用戶其他信息。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448634.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448634.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448634.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java異常處理001:Maven clean package時Failed to clean project: Failed to delete

Java異常處理001&#xff1a;Maven打包時Failed to clean project: Failed to delete 異常日志&#xff1a; [ERROR] Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.6.1:clean (default-clean) on project fmk-web: Failed to clean project: Failed …

Weekly Contest 141

做了第一道后&#xff0c;看了下中間兩道題目&#xff0c;沒怎么看懂就先放著&#xff0c;做完最后一道&#xff0c;然后就沒時間了。 1089. Duplicate Zeros Given a fixed length array arr of integers, duplicate each occurrence of zero, shifting the remaining element…

IntelliJ IDEA 中配置、使用 SVN

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1.配置svn 如下圖&#xff1a; file -- setting -- version control -- subversion -- 選擇 SVN安裝路徑 -- apply -- OK 2.直接檢出…

切記!職場郵件需注意的細節

電子郵件是如今工作場所重要的通信工具之一&#xff0c;但不是每個人都知道如何很好地使用這個工具。工作郵件也是人際溝通的一種方式&#xff0c;和打電話、面談一樣&#xff0c;有很多學問講究&#xff0c;所以在發送郵件之前一定要深思熟慮。 【發送&#xff0c;抄送&…

李洋瘋狂C語言之初

1.sizeof 是看數據類型所占空間大小&#xff0c;這個大小是以 字節&#xff08;B&#xff09;為單位 char 是C語言的字符數據類型 %d 用在printf 中表示往屏幕打印一個數字 printf ("char&#xff1a; %d\n", sizeof(char)); 數據類型之間的關系&#xff0c;shor…

時時流量查看工具-ifsta,nload,iftop

為什么80%的碼農都做不了架構師&#xff1f;>>> 1、ifstat 是一個網絡流量監測程序。能查看網卡的流出和流入的字節. 概要&#xff1a;ifstat就像iostat/vmstat描述其它的系統狀況一樣&#xff0c;是一個統計網絡接口活動狀態的工具。 參數&#xff1a; -l 監測環路…

10大清宿便排毒方法及簡單排毒瘦小腹運動

早上空腹喝水法&#xff1a;每日起床后空腹喝下500C.C.加鹽的冷開水。只要是冷的飲料或水分&#xff0c;在腸胃空腹時都有刺激腸胃蠕動的效果&#xff0c;而且越冰刺激效果越好&#xff0c;建議不需加鹽&#xff0c;以免高血壓患者因鹽分中的金屬離子造成腎的負擔。 優酪乳加綠…

破解 IntelliJ IDEA 、免費注冊方法、注冊碼

1. 找到hosts文件&#xff0c;在此路徑下 C:\Windows\System32\drivers\etc 2. 修改hosts 文件&#xff0c;在最后 加一行配置&#xff1a; &#xff08;此操作需要電腦管理員權限&#xff09; 0.0.0.0 account.jetbrains.com 3. 從idea 注冊碼生成網站生成一組注冊碼。網…

李洋瘋狂C語言之冒泡排序法

今天的課后任務是2種排序方式&#xff08;冒泡排序和選擇排序&#xff09; 冒泡排序法1 原理&#xff1a;從a[0]開始&#xff0c;依次將其和后面的元素比較&#xff0c;若a[0]>a[i]&#xff0c;則交換他們&#xff0c;一直比較到a[n]。同理對a[1], a[2], ……a[n-1]處理&a…

MySQL水平分區代理Spock Proxy(一)

為什么80%的碼農都做不了架構師&#xff1f;>>> MySQL水平分區代理Spock Proxy 水平分區(sharding)將同一數據表中的數據通過特定的算法進行分離&#xff0c;分別保存在不同的數據表中&#xff0c;從而部署到不同的數據庫服務器上。 水平分區后&#xff0c;數據拆分…

OO第四單元作業

1.作業的架構設計 &#xff08;1&#xff09;對于第一次作業中&#xff0c;要求我們實現關于類圖的查詢指令。 在這次作業中&#xff0c;主要采用的儲存方法是哈希表。 在查詢方法上&#xff0c;大多數要求諸如共有多少類等&#xff0c;利用哈希表進行查詢即可。 比較困難的一些…

傷錢傷感情 10件不能和親戚一起干的事兒

關于親戚和理財&#xff0c;網友小盒總結了下十大別和親戚干的事兒&#xff0c;干了之后保管既傷錢又傷感情&#xff1a; 1、別幫親戚炒股 賺了覺得你賺得不如以前吹的那么多&#xff0c;賠了就剩翻臉了&#xff0c;搭時間搭功夫還不落好。 2、別和親戚一起做生意 道理同…

李洋瘋狂C語言之選擇排序

選擇排序法 原理&#xff1a; 選擇法循環過程與冒泡法一致&#xff0c;它還定義了記號mini&#xff0c;然后依次把a[min]同后面的元素比較&#xff0c;若a[min]>a[j],則使kj. 最后看看ki是否還成立&#xff0c;不成立則交換a[k], a[i],這樣就比冒泡法省下許多無用的交換&a…

利用 git 提交代碼、git 簡單使用(拉取、推送、分支、合并)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1.安裝 git sudo apt-get install git 2.查看版本&#xff1a; git --version 我的版本信息&#xff1a; 3. 配置用戶名和郵箱 : …

如何在android studio中設置sdk path?

為什么80%的碼農都做不了架構師&#xff1f;>>> Press F4 into Project StructureLeft > SDKsPress , add another sdk轉載于:https://my.oschina.net/itfanr/blog/195714

面試題之第一部分(Python基礎篇) 80題

第一部分&#xff08;python基礎篇&#xff09;80題 為什么學習Python&#xff1f;* # 1. python應用于很多領域&#xff0c;比如后端&#xff0c;前端&#xff0c;爬蟲&#xff0c;機器學習&#xff08;人工智能&#xff09;等方面&#xff0c;幾乎能涵蓋各個開發語言的領域&a…

OpenCL的安裝與配置

Windows 步驟 1&#xff1a;在 http://developer.amd.com/pages/default.aspx根據相應的操作系統&#xff0c;下載最新的 AMD driver&#xff0c; AMD APP SDK。AMD APP SDK目前支持Windows VISTA[32][64]bit&#xff0c;Windows 7[32][64]bit操作系統。 步驟 2:如果已經安裝了…

解決:java.lang.IllegalStateException: ApplicationEventMulticaster not initialized

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. springboot 項目啟動時報錯&#xff1a; java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call …

李洋瘋狂C語言之求素數的方法

今天課上李洋老師講到求素數時&#xff0c;講了一種新的方法&#xff0c;一開始聽得我一臉懵逼&#xff0c;但當我理解的時候&#xff0c;眼前一亮&#xff0c;老師的算法省去了不少步驟&#xff0c;話不多說&#xff0c;附上題目&#xff1a;求100到200之間的素數。 輸入&…

面試官問我:平常如何對你的 Java 程序進行調優?

閱讀本文大概需要 10 分鐘。作者&#xff1a;張俊城, 郭理勇, 劉建來源&#xff1a;http://t.cn/AiCTERJzJava 應用性能優化是一個老生常談的話題&#xff0c;典型的性能問題如頁面響應慢、接口超時&#xff0c;服務器負載高、并發數低&#xff0c;數據庫頻繁死鎖等。尤其是在“…