คำถามติดแท็ก test

นี่เป็นเรื่องเกี่ยวกับยูทิลิตี Unix ที่เรียกว่า "test" ซึ่งเรียกว่า "[" หรือไวยากรณ์ของเชลล์ [[…]] สำหรับคำถามเกี่ยวกับการทดสอบซอฟต์แวร์และการตั้งค่าให้ใช้แท็ก "การทดสอบ"

3
[-t 1] ตรวจสอบอะไร
ฉันเพิ่งพบวิธีการเริ่มต้นzshเมื่อฉันเริ่มbashบน Windows จาก https://www.howtogeek.com/258518/how-to-use-zsh-or-another-shell-in-windows-10/ .bashrcมันแนะนำให้เพิ่มรหัสต่อไปนี้ที่สุดท้าย # Launch Zsh if [ -t 1 ]; then exec zsh fi อะไร[ -t 1 ]หมายถึง? มันเป็นความจริงเหรอ? จากนั้นฉันจะทำสิ่งนี้ได้ไหม? exec zsh
13 bash  shell  zsh  test 

3
อะไรคือความแตกต่างของ -a และ -e ในนิพจน์เงื่อนไขของ bash?
จากman bash: CONDITIONAL EXPRESSIONS [...] -a file True if file exists. [...] -e file True if file exists. แล้วอะไรคือความแตกต่างระหว่าง[ -a $FILE ]และ[ -e $FILE ]ถ้ามี? หากไม่มีความแตกต่างจริงเหตุใดจึงมีค่าสถานะสองค่าสำหรับจุดประสงค์เดียวกัน
12 bash  shell  test 

3
ทำการทดสอบ -nt / -ot ใน POSIX sh
บิวด์อินtestและ[ยูทิลิตีมีการทดสอบ-nt("ใหม่กว่า") และ-ot("เก่ากว่า") ในเชลล์ส่วนใหญ่แม้ว่าเชลล์จะทำงานใน "โหมด POSIX" (เช่นเดียวกับยูทิลิตี้ภายนอกของชื่อเดียวกันบน ระบบที่ฉันสามารถเข้าถึงได้) การทดสอบเหล่านี้ใช้สำหรับการเปรียบเทียบการประทับเวลาการปรับเปลี่ยนในสองไฟล์ เอกสารความหมายของพวกเขาจะแตกต่างกันเล็กน้อยในการใช้งาน (โดยคำนึงถึงสิ่งที่เกิดขึ้นหากไฟล์หนึ่งหรือไฟล์อื่นที่ไม่ได้อยู่) แต่พวกเขาจะไม่รวมอยู่ในข้อมูลจำเพาะ POSIX สำหรับtestยูทิลิตี้ พวกเขาจะไม่ถูกพาไปข้างหน้าในtestยูทิลิตี้เมื่อคำสั่งแบบมีเงื่อนไขถูกลบออกจากเปลือก [KornShell] เพราะพวกเขาไม่ได้รวมอยู่ในtestยูทิลิตี้ที่มีอยู่ในการติดตั้งในอดีตของshยูทิลิตี้ สมมติว่าฉันต้องการเปรียบเทียบการประทับเวลาการปรับเปลี่ยนระหว่างไฟล์ใน/bin/shเชลล์สคริปต์แล้วดำเนินการขึ้นอยู่กับว่าไฟล์หนึ่งใหม่กว่าอีกไฟล์หนึ่งดังเช่นใน if [ "$sigfile" -nt "$timestamp" ] || [ "$sigfile.tmp" -nt "$timestamp" ] then return fi ... ยูทิลิตี้อื่น ๆ ที่ฉันสามารถใช้นอกเหนือจากmake(ซึ่งจะทำให้สคริปต์ที่เหลือไม่ได้พูดอย่างน้อยที่สุด) หรือฉันควรจะสมมติว่าไม่มีใครที่จะเรียกใช้สคริปต์ใน "การดำเนินการทางประวัติศาสตร์ของsh" หรือลาออกเพื่อเขียนเปลือกเฉพาะเช่นbash?
11 files  timestamps  posix  test 

1
อย่าใช้โอเปอเรเตอร์ `-a` หรือ` -o 'กับ `['
Stéphane Chazelasเขียนว่า: กฎบางอย่างเช่น อ้างถึงตัวแปรเสมอ ไม่เคยใช้ตัวดำเนินการ-aหรือ-o(ใช้หลาย[คำสั่งและตัวดำเนินการ&&และ||เชลล์) สร้าง[ความน่าเชื่อถือด้วย POSIX shells ทำไม "ไม่เคยใช้-aหรือ-oโอเปอเรเตอร์" ฉันจะ "ใช้[คำสั่งหลายคำสั่งและตัวดำเนินการ&&และ||เชลล์)" ได้อย่างไร
11 bash  shell  test 

3
กำหนดวันสุดท้ายของทุกเดือน
ฉันอ่านจากคำแนะนำในการกำหนดตารางสคริปต์ในวันสุดท้ายของเดือน: หมายเหตุ: ผู้อ่านที่ฉลาดอาจสงสัยว่าคุณจะสามารถตั้งคำสั่งให้ดำเนินการในวันสุดท้ายของทุกเดือนได้อย่างไรเพราะคุณไม่สามารถกำหนดค่าวันที่ให้ครอบคลุมทุกเดือนได้ ปัญหานี้ทำให้เกิดโปรแกรมเมอร์ Linux และ Unix และวางไข่โซลูชั่นที่แตกต่างกันไม่กี่ วิธีการทั่วไปคือการเพิ่มคำสั่ง if-then ที่ใช้คำสั่ง date เพื่อตรวจสอบว่าวันในวันพรุ่งนี้คือ 01: 00 12 * * * if [`date +%d -d tomorrow` = 01 ] ; then ; command1 สิ่งนี้จะตรวจสอบทุกวันเวลา 12.00 น. เพื่อดูว่าเป็นวันสุดท้ายของเดือนหรือไม่และหากเป็นเช่นนั้น cron จะรันคำสั่ง วิธีการ[`date +%d -d tomorrow` = 01 ]ทำงานหรือไม่ แก้ไขให้ถูกต้องthen; command1หรือไม่?
10 shell-script  cron  date  test 

3
เหตุใดไฟล์ที่มีสิทธิ์ 400 รายการที่รูทเครื่องสามารถอ่านได้ แต่อ่านอย่างเดียวโดยผู้ใช้
หากฉันสร้างไฟล์ในฐานะผู้ใช้ที่ไม่มีสิทธิ์และเปลี่ยนโหมดการอนุญาต400เป็นผู้ใช้นั้นจะเห็นว่าเป็นแบบอ่านอย่างเดียวอย่างถูกต้อง: $ touch somefile $ chmod 400 somefile $ [ -w somefile ] && echo rw || echo ro ro ทั้งหมดเป็นอย่างดี. แต่แล้วรากก็มาพร้อม: # [ -w somefile ] && echo rw || echo ro rw ห่า? แน่นอนว่ารูทสามารถเขียนไปยังไฟล์แบบอ่านอย่างเดียวได้ แต่ไม่ควรทำให้เป็นนิสัย: แนวปฏิบัติที่ดีที่สุดมีแนวโน้มที่จะกำหนดว่าฉันควรจะสามารถทดสอบบิตการอนุญาตการเขียนได้และถ้าไม่ใช่ก็เป็นไปได้ ทางนั้นด้วยเหตุผล ผมคิดว่าผมต้องการที่จะเข้าใจทั้งสองเหตุผลนี้เกิดขึ้นและวิธีการที่ฉันจะได้รับเท็จรหัสการส่งคืนเมื่อการทดสอบไฟล์ที่ไม่ได้มีการเขียนชุดบิตหรือไม่?

4
เหตุใดจึงเลือกสาขา 'ถ้า [$ 1 =“ 1”]' เสมอแม้ว่าจะไม่ใช่ $ 1 ก็ตาม
ฉันมีเชลล์สคริปต์ชื่อ 'teleport.sh' เช่นนี้: if [ $1="1" ]; then shift mv "$@" ~/lab/Sun elif [ $1="2" ]; then shift mv "$@" ~/lab/Moon elif [ $1="3" ]; then shift mv "$@" ~/lab/Earth fi เมื่อฉันรัน: sh teleport.sh 2 testfile สิ่งนี้testfileถูกย้ายไปยัง~/lab/Sunไดเรกทอรีซึ่งทำให้ฉันสับสนมากเพราะฉันไม่ผ่าน 1 หรือ '1' ไปยังสคริปต์นั้น เกิดอะไรขึ้นที่นี่?
10 bash  shell  test 

5
ฉันจะใช้คำสั่ง If-Else ตามวันในสัปดาห์ได้อย่างไร
ปัญหา: ฉันต้องตรวจสอบว่าวันนี้เป็นวันพฤหัสบดีหรือไม่และดำเนินการต่าง ๆ ตามผลลัพธ์ของเงื่อนไขนี้ ฉันลองวิธีที่แตกต่างกันสองวิธี: ได้รับชื่อวัน: DAYOFWEEK=$(date +"%a") echo DAYOFWEEK: $DAYOFWEEK if ["$DAYOFWEEK" == "Thu"]; then echo YES else echo NO fi รับวัน NUM: DAYOFWEEK=$(date +"%u") echo DAYOFWEEK: $DAYOFWEEK if ["$DAYOFWEEK" == 4]; then echo YES else echo NO fi ในทั้งสองกรณีผลลัพธ์คือ NO แม้ว่ามันควรจะเป็นใช่ เกิดอะไรขึ้น?

2
ทดสอบ POSIX และ -a
ฉันตรวจสอบสคริปต์ของฉันด้วยcheckbashismsและฉันได้รับคำเตือนดังต่อไปนี้: possible bashism in check_ssl_cert line 821 (test -a/-o): if [ -n "${ALTNAMES}" -a -n "${COMMON_NAME}" ] ; then ในข้อกำหนด 4.62.4 ของ POSIX ที่ฉันพบ primary -a primary ดำเนินการไบนารีและของผลลัพธ์หลักและหลัก ตัวดำเนินการ -a มีความสำคัญเหนือกว่าตัวดำเนินการ -o ทำไม-aและ-oไม่ถือว่าเป็นอุปกรณ์พกพา
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.