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

สคริปต์คือชุดคำสั่งที่เขียนในไฟล์ "ข้อความธรรมดา" ตัวแปลสคริปต์ (ตัวอย่างเช่น Bash หรือ shell อื่น, Python, Perl, Ruby, ฯลฯ ) อ่านไฟล์และดำเนินการตามคำแนะนำราวกับว่าพวกมันถูกป้อนที่ command prompt

3
ฉันควรใส่สคริปต์ทุบตีของฉันที่ไหน
ฉันมีสคริปต์ทุบตีง่าย ๆ สองสามข้อที่ฉันพายด้วยกันสำหรับสิ่งที่ฉันทำอย่างสม่ำเสมอ หนึ่งในนั้นคือเรียกใช้ความซ้ำซ้อนเพื่อทำงานสำรองของฉัน ไม่มีอะไรที่ฉลาดเพียงแค่ .. ถ้าอย่างนั้นงบจริง ๆ เช่นนี้จะต้องทำงานเป็น sudo มันเป็นวิธีที่ดีที่สุดที่จะวางสคริปต์ของฉันใน / usr / bin (หรือสถานที่อื่น ๆ ในเส้นทาง) chown เพื่อ root.root และ chmod ถึง 700?
15 bash  scripts  sudo 

4
เหตุใดการหารในการคำนวณทางคณิตศาสตร์จึงคำนวณเปอร์เซ็นต์ส่วนใหญ่เป็น 0
การพยายามใช้ bash arithemetic สำหรับสคริปต์ แต่$eไม่ได้อัปเดตจนกว่าจะสิ้นสุด เอาท์พุทพูดสำหรับตัวเอง max=5 for e in $(seq 1 1 $max); do percent=$(( $e/$max*100 )) echo "echo $e / $max : = $percent" done Tl; DR: แสดง 1..5 เป็นเปอร์เซ็นต์ ผลผลิต: echo 1 / 5 : = 0 echo 2 / 5 : = 0 echo 3 / …

2
เป็นไปได้ไหมที่จะตั้ง Ubuntu ในลักษณะที่ไม่ได้ปิดระบบก่อนที่สคริปต์จะเสร็จสิ้น
ฉันใช้สคริปต์เพื่อสำรองข้อมูลส่วนเพิ่มของพาร์ทิชัน btrfs จากดิสก์หนึ่งไปยังอีก สคริปต์เริ่มต้นโดย cron.weekly ในเวลาสุ่มของวัน หากฉันปิดระบบในขณะที่สคริปต์กำลังทำงานอยู่ฉันกำลังมีปัญหากับการสำรองข้อมูลเก่าที่ถูกลบออกและไม่ได้สร้างใหม่ มีวิธีการตั้งค่าระบบให้รอจนกว่าสคริปต์จะเสร็จสิ้นหรือไม่ ฉันใช้ Ubuntu 16.04 กับ systemd

5
เพิ่มและลบช่องอัพเดตในแบบเทอร์มินัลอย่างง่าย
ฉันรู้ว่ามี GUI ใน Ubuntu Software & Updatesเพื่อเปิดใช้งานช่องทางอัพเดต การปรับปรุง เสนอ backports ความปลอดภัย ดังที่แสดงในภาพหน้าจอนี้: ฉันกำลังมองหาวิธีที่ง่ายในการทำสิ่งนี้จากภายในเทอร์มินัลโดยใช้คำสั่งเช่น sudo apt-add-update enable updates sudo apt-add-update enable proposed sudo apt-add-update enable backports sudo apt-add-update enable security sudo apt-add-update disable updates sudo apt-add-update disable proposed sudo apt-add-update disable backports sudo apt-add-update disable security และสิ่งเพิ่มเติม sudo apt-add-update enable default …

4
จะรันสคริปต์ได้อย่างไรเมื่อมีการเปลี่ยนแปลง IP ท้องถิ่นของคุณ
ก่อนทำเครื่องหมายว่าซ้ำ: นี่ไม่เกี่ยวกับ DNS แบบไดนามิกหรือสิ่งที่คล้ายกัน ฉันรู้วิธีเรียกใช้สคริปต์ทุกครั้งที่เครือข่ายของฉันทำงาน มันเป็นเรื่องง่ายของการเพิ่มสคริปต์ในไดเรกทอรี/etc/NetworkManager/dispatcher.dเช่นนี้ #!/bin/bash IF=$1 STATUS=$2 case "$2" in up) logger -s "NM Script up $IF triggered" su rmano -c /home/romano/bin/myscript ;; down) logger -s "NM Script down $IF triggered" ;; *) ;; esac ในกรณีของฉันmyscriptมันง่ายมากifconfig -a > ~/Dropbox/myifconfig.txt--- ฉันใช้เพราะฉันต้องการรู้ IP ท้องถิ่นของฉันจากทุกที่ในมหาวิทยาลัยและมันจะเปลี่ยนบ่อย จนถึงตอนนี้ระบบใช้งานได้ดี แต่น่าเสียดาย DHCP ที่นี่มีการกำหนดค่าเพื่อให้ IP บางครั้งมีการเปลี่ยนแปลงได้โดยไม่ต้องลง …

3
คำสั่ง Echo พร้อมตัวเลือกสีในสคริปต์และคำสั่งทำงานแตกต่างกัน
ถ้าฉันวิ่งเป็นecho -e "\e[1;31mThis is red text\e[0m"แถว comand มันจะพิมพ์ข้อความสีแดงออกมา อย่างไรก็ตามถ้าฉันใช้มันเขียนในไฟล์สคริปต์ test.sh #! /bin/bash echo -e "\e[1;31mThis is red text\e[0m" วิ่ง $ sh test.sh มันพิมพ์ออกมา -e \e[1;31mThis is red text\e[0m ทำไมพวกเขาถึงทำแตกต่างกันไป?

2
วิธีส่งผลลัพธ์ของ bc ไปยังตัวแปร
ฉันกำลังเขียนสคริปต์และฉันต้องการส่งผ่านผลลัพธ์bcไปยังตัวแปร ฉันได้ประกาศตัวแปร 2 ตัว ( var1และvar2) แล้วให้ค่าเหล่านั้น ในสคริปต์ของฉันฉันต้องการส่งผลลัพธ์จากbcไปยังตัวแปรอื่นพูดvar3เพื่อให้ฉันสามารถทำงานกับvar3การคำนวณอื่น ๆ ได้ จนถึงตอนนี้ฉันสามารถเขียนผลลัพธ์ไปยังไฟล์ซึ่งไม่ใช่สิ่งที่ฉันกำลังมองหาและนอกจากนี้ฉันสามารถสะท้อนผลลัพธ์ในเทอร์มินัล แต่ฉันต้องการส่งผลลัพธ์ไปยังตัวแปรในขณะนั้น ฉันสามารถทำงานกับตัวแปรนั้นได้ echo "scale=2;$var1/var2" | bc

5
เครื่องมือจัดการตัวดึงข้อมูลบรรทัดคำสั่ง
ฉันลืมคำสั่งแตกไฟล์ที่เกี่ยวข้องทั้งหมดสำหรับทุกรูปแบบการบีบอัด ดังนั้นฉันจึงคิดเกี่ยวกับการเขียนสคริปต์ที่แมปส่วนขยายของไฟล์กับคำสั่งแยกที่เหมาะสม แต่ฉันเดาบางสิ่งบางอย่างเช่นนี้มีอยู่แล้วฉันแค่หามันไม่เจอ ฉันจะมีความสุขกับไฟล์ลูกกลิ้ง แต่เครื่องมือลูกกลิ้งเป็นเครื่องมือ GUI

4
วิธีที่เหมาะสมในการเพิ่มบัญชีผู้ใช้ผ่านสคริปต์ทุบตี
นี่คือรหัสสคริปต์ที่ฉันใช้ตอนนี้: getent group $MYGROUP if [ $? -ne 0 ] ; then sudo su -c "groupadd $MYGROUP" fi sudo su -c "useradd mynewuser -p mypassword -m -g $PRIMARYGRP -G $MYGROUP" วิธีนี้ใช้ได้ดีกับ openSuse แต่มีปัญหาหลายประการเกี่ยวกับบัญชีผู้ใช้ที่สร้างบนUbuntuดังนั้นฉันจึงขอความช่วยเหลือจากที่นี่ เทอร์มินัลพรอมต์ไม่ได้ตั้งค่า ( echo $PS1ไม่ส่งคืนอะไร) ปุ่มลูกศรและแป้นแท็บทำงานไม่ถูกต้องในเครื่องเทอร์มินัล ดูเหมือนว่ารหัสผ่านจะไม่ทำงาน (แม้ว่าฉันจะยังไม่ชัดเจนว่าปัญหานี้คืออะไร) สิทธิ์ / etc / sudoers ที่กำหนดไว้สำหรับผู้ใช้ใหม่นี้จะไม่ได้รับเกียรติ ถ้าฉันจะสร้างผู้ใช้ด้วยตนเองadduser(แทนที่จะเป็น useradd) ฉันไม่มีปัญหาเหล่านี้ใน Ubuntu …
15 bash  scripts  users  adduser 

4
รันสคริปต์ในการเข้าสู่ระบบโดยใช้ ~ / .bash_login
ฉันต้องเรียกใช้สคริปต์เมื่อฉันเข้าสู่ระบบและออกจากระบบใน Ubuntu ของฉัน ฉันพยายามใส่สคริปต์ไว้~/.bash_loginแต่ไม่ได้ผล มีตำแหน่งที่ดีกว่าที่ฉันสามารถเรียกใช้สคริปต์ได้หรือไม่ สคริปต์ของฉันอยู่ในตำแหน่ง/home/gsd/script/login.shและสามารถเรียกใช้งานได้ แก้ไข: สคริปต์ของฉันทำงานเมื่อฉันพิมพ์: /home/gsd/script/login.shและมันตั้งด้วย + x ตอนนี้ฉันมีเท่านั้น: touch /home/gsd/test.txtในการ~/.bash_loginทดสอบ ไฟล์ test.txt ไม่เคยถูกสร้างขึ้น แก้ไข 2: gsd@laptop:~$ ll ~/.bash* -rw------- 1 gsd gsd 38639 2012-01-25 17:25 .bash_history -rw-r--r-- 1 gsd gsd 29 2012-01-25 15:22 .bash_login -rw-r--r-- 1 gsd gsd 220 2011-11-03 19:22 .bash_logout -rw-r--r-- 1 gsd gsd …
15 login  scripts  logout 

2
ฉันจะสคริปต์การตั้งค่าที่ทำโดย gnome-tweak-tool ได้อย่างไร
ฉันชอบที่จะสามารถกำหนดค่าสิ่งต่าง ๆ จากบรรทัดคำสั่งดังนั้นเมื่อฉันติดตั้งระบบปฏิบัติการใหม่ฉันก็สามารถเรียกใช้สคริปต์และได้รับการกำหนดค่าที่ต้องการกลับมาได้ ตั้งแต่ "อัปเกรด" เป็น Ubuntu 17.10 ฉันพบว่าฉันต้องใช้ gnome-tweak-tool เพื่อตั้งค่าบางอย่างตามที่ฉันต้องการ เมื่อฉันพบการตั้งค่าใน gnome-tweak-tool GUI ฉันจะเข้าใจการแปลที่ใช้สคริปต์ได้อย่างไร ตัวอย่างเช่นบรรทัด gsettings ต่อไปนี้ตรงกับรายการที่เกี่ยวข้องในหน้าจอ gnome-tweak-tool ด้านล่าง ... gsettings set org.gnome.desktop.wm.preferences titlebar-font "Tahoma Bold 8" gsettings set org.gnome.desktop.interface font-name "Tahoma 8" gsettings set org.gnome.desktop.interface document-font-name "Tahoma 8" gsettings set org.gnome.desktop.interface monospace-font-name "FixedSC 10" ... แต่ใครจะเดาได้อย่างไร ตัวอย่างเช่นฉันจะหาตำแหน่งที่จะรับการตั้งค่าที่เกี่ยวข้องสำหรับคำใบ้และการลดรอยหยักได้อย่างไร

4
วิธีการส่ง regex เมื่อค้นหาเส้นทางไดเรกทอรีในทุบตี?
ฉันได้เขียนสคริปต์ทุบตีขนาดเล็กเพื่อหาถ้าไดเรกทอรีชื่อanacondaหรือผู้ใช้ของฉันminiconda $HOMEแต่ไม่พบminiconda2ไดเรกทอรีในบ้านของฉัน ฉันจะแก้ไขสิ่งนี้ได้อย่างไร if [ -d "$HOME"/"(ana|mini)conda[0-9]?" ]; then echo "miniconda directory is found in your $HOME" else echo "anaconda/miniconda is not found in your $HOME" fi PS: ถ้าฉันมี[ -d "$HOME"/miniconda2 ]; thenก็พบไดเรกทอรี miniconda2 ดังนั้นฉันคิดว่าข้อผิดพลาดอยู่ในส่วน"(ana|mini)conda[0-9]?" ฉันต้องการให้สคริปต์เป็นเรื่องทั่วไป สำหรับฉันมันเป็น miniconda2 แต่สำหรับผู้ใช้อื่น ๆ มันอาจจะเป็น anaconda2, miniconda3 เป็นต้น

7
ฉันจะนับไฟล์ที่มีนามสกุลเฉพาะและไดเรกทอรีที่อยู่ในนั้นได้อย่างไร
ฉันต้องการทราบจำนวนไฟล์ปกติที่มีส่วนขยาย.cในโครงสร้างไดเรกทอรีขนาดใหญ่ที่ซับซ้อนและจำนวนไดเรกทอรีไฟล์เหล่านี้จะกระจายไปทั่ว ผลลัพธ์ที่ฉันต้องการเป็นเพียงตัวเลขสองตัวนั้น ฉันเคยเห็นคำถามนี้เกี่ยวกับวิธีรับจำนวนไฟล์ แต่ฉันจำเป็นต้องทราบจำนวนไดเรกทอรีที่ไฟล์อยู่ด้วย ชื่อไฟล์ของฉัน (รวมถึงไดเรกทอรี) อาจมีอักขระใด ๆ พวกเขาอาจเริ่มต้นด้วย.หรือ-และมีช่องว่างหรือขึ้นบรรทัดใหม่ ฉันอาจมี symlink ที่ชื่อลงท้ายด้วย.cและ symlink ไปยังไดเรกทอรี ฉันไม่ต้องการให้มีการติดตามหรือนับจำนวน symlink หรืออย่างน้อยฉันก็ต้องการทราบว่าพวกเขาจะถูกนับเมื่อใดและเมื่อใด โครงสร้างไดเรกทอรีมีหลายระดับและไดเรกทอรีระดับบนสุด (ไดเรกทอรีทำงาน) มี.cไฟล์อย่างน้อยหนึ่งไฟล์ ฉันรีบเขียนคำสั่งบางอย่างในเชลล์ (Bash) เพื่อนับมันด้วยตัวเอง แต่ฉันไม่คิดว่าผลลัพธ์จะแม่นยำ ... shopt -s dotglob shopt -s globstar mkdir out for d in **/; do find "$d" -maxdepth 1 -type f -name "*.c" >> out/$(basename "$d") done …

6
สคริปต์ bash แบบเรียกซ้ำเพื่อรวบรวมข้อมูลเกี่ยวกับแต่ละไฟล์ในโครงสร้างไดเรกทอรี
ฉันจะทำงานซ้ำ ๆ ผ่านไดเรคทอรีต้นไม้และรันคำสั่งเฉพาะในแต่ละไฟล์และออกพา ธ , ชื่อไฟล์, นามสกุล, ขนาดไฟล์และข้อความเฉพาะอื่น ๆ ไปยังไฟล์เดียวในไฟล์ทุบตี
14 bash  scripts 

6
ไหนจะเร็วกว่าที่จะลบบรรทัดแรกในไฟล์ ... เซดหรือท้าย
ในคำตอบนี้ ( ฉันจะลบบรรทัดแรกของไฟล์ที่มี sed ได้อย่างไร ) มีสองวิธีในการลบระเบียนแรกในไฟล์: sed '1d' $file >> headerless.txt ** ---------------- หรือ ----------------** tail -n +2 $file >> headerless.txt โดยส่วนตัวแล้วฉันคิดว่าtailตัวเลือกนั้นเป็นที่ชื่นชอบและน่าอ่านมากกว่า แต่อาจเป็นเพราะฉันถูกท้าทาย วิธีใดเร็วที่สุด
14 scripts  sed  tail 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.