Shell程式設計入門(二)

2021-10-04 03:07:47 字數 2687 閱讀 3688

多練習才會記得牢

這裡的題目來自於(個別刪選)

如果當前使用者是管理員,則使用yum 安裝 vsftpd,如果不是,則提示您非管理員,不可安裝

提示使用者輸入使用者名稱和密碼,指令碼自動建立相應的賬戶及配置密碼。如果使用者不輸入賬戶名,則提示必須輸入賬戶名並退出指令碼;如果使用者不輸入密碼,則統一使用預設的 admin 作為預設密碼。

編寫指令碼測試 192.168.4.0/24 整個網段中哪些主機處於開機狀態,哪些主機處於關機狀態

判斷檔案或目錄是否存在

答題環節

1.

if[[

$user == 'root']]

;then

echo yes

# yum -y install vsftpd

else

echo no

# echo you are not root

fi

判斷當前使用者是否是管理員還可以使用 $uid -eq 0

if[[

$uid

-eq 0 ]

];then

echo yes

# yum -y install vsftpd

else

echo no

# echo you are not root

fi

新增使用者的命令 useradd user

在終端中會自動彈出詢問新增密碼

刪除使用者的命令是 userdel user 這個很重要,不能輕易使用。命令只會刪除使用者,並不會刪除給使用者建立的檔案(命名空間)需要增加 -r 把附帶的檔案一起刪除。-f 強制刪除使用者。當使用者已經登入的時候,使用-f 可以強制刪除使用者,但是使用者在不退出前,依舊可以使用,處於活動狀態。

使用 id username 可以判斷使用者是否存在。如果想檢視有多少使用者,登入/home目錄,有幾個目錄就有幾個使用者

然而使用useradd user並意味著你就會在/home建立了乙個叫做username的目錄,如果手工把目錄建立完,使用-r也不能把手工建立的目錄刪除

#!/bin/sh 

read -p 'input unsername: ' usernameif[

[-z $username]]

;then

echo you need input username

exit 2

fistty -

echo

read -p 'input password: ' password

stty echo

password=$

sudo useradd $user

mkdir /home/$

echo

$pass

| passwd --stdin $username

我最後都沒有執行成功,當輸完密碼後,終端就直接退出了,在home目錄下我也沒有找到對應的使用者目錄,使用id $username也沒有找到使用者。顯然在sudo useradd $user就被中斷了。遍尋網路都是這種寫法。

我還找到乙個人寫的關於迴圈寫去的指令碼

#!/bin/sh

usrname=(username1 username2)

ii=0

maxuser=2

while((

$ii< $maxuser))

dosudo useradd $

mkdir /home/$

chown -r $

/home/$

echo $

|passwd $

--stdin

ii=$((ii

+1))

done

echo

"finished!"

exit

然而我依舊是執行不成功。

通過管道修改密碼的注意點

echo $password |passwd --stdin $user

也卻是是通過管道來修改密碼的語句,文章還提供了以下的說法

設定密碼最好不要使用echo 「password」 |passwd --stdin user 這條命令,一是不安全,通過history可以看到密碼,二是不確定因素太多,設定密碼容易出錯,具體echo的用法可以上網搜尋檢視;

一台伺服器至少應該設定兩個使用者,乙個是root,另外乙個是擁有root許可權的普通使用者(通過配置/etc/sudoers可以實現),這樣就能夠保證乙個密碼出錯後還可以通過另外乙個使用者登入伺服器重置密碼,;

通過passwd user 命令更改密碼,密碼**現的符號不包含其他意義,僅僅是作為符號本身來使用,這種方法設定密碼更安全。

然而我在命令列中修改我的新建的賬戶密碼 passwd: unrecognized option 『–stdin』

同樣的方法卻成功了的**

當我去除 --stdin 這個 引數時

passwd: you may not view or modify password information for tina.

沒許可權至少是能修改的嘛

? 表示

上乙個命

令執行狀

態,[[

?表示上乙個命令執行狀態,[[

?表示上乙個

命令執行

狀態,[

[? -eq 0]] 表示上乙個指令執行成功與否

shell程式設計入門(二)

shell程式設計很有趣,shell程式設計很複雜,shell程式設計離我們很近又似乎很遠 使用linux離不開它,但似乎又不曾仔細了解它。這套文章的目的是帶你走進shell程式設計的大門,領略它的豐富多彩。本節講解內容 echo,read與printf。本節使用的shell版本為 用於引用變數 n...

Shell程式設計入門二 echo命令

shell的echo命令和php的echo指令類似,都是用於輸出值。我們可以使用echo實現更複雜的輸出格式控制。echo hello world echo hello world 這兩句輸出結果均為 hello world echo hello world echo hello world 這兩句...

shell程式設計入門

shell指令碼程式不是複雜的程式,它是按行解釋的。指令碼程式總是以 bin sh 開始,它通知shell使用系統上的bourne shell直譯器。其中 符號是注釋。指令碼程式是從上到下執行的,執行指令碼前需要改變該指令碼程式的執行許可權。確保正確建立指令碼例徑,只有 這樣,指令碼程式才能正確執行...